diff --git a/backend/app/api/activity.py b/backend/app/api/activity.py index a5a1633d..a9b453ca 100644 --- a/backend/app/api/activity.py +++ b/backend/app/api/activity.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING, Any from uuid import UUID from fastapi import APIRouter, Depends, HTTPException, Query, Request, status -from sqlalchemy import asc, desc, func +from sqlalchemy import and_, asc, desc, func, or_ from sqlmodel import col, select from sse_starlette.sse import EventSourceResponse @@ -78,6 +78,46 @@ def _agent_role(agent: Agent | None) -> str | None: return None +def _build_activity_route( + *, + event: ActivityEvent, + board_id: UUID | None, +) -> tuple[str, dict[str, str]]: + if board_id is not None: + board_id_str = str(board_id) + board_params = {"boardId": board_id_str} + + if event.event_type == "task.comment" and event.task_id is not None: + return ( + "board", + { + **board_params, + "taskId": str(event.task_id), + "commentId": str(event.id), + }, + ) + + if event.event_type.startswith("approval."): + return ("board.approvals", board_params) + + if event.event_type.startswith("board."): + return ("board", {**board_params, "panel": "chat"}) + + if event.task_id is not None: + return ("board", {**board_params, "taskId": str(event.task_id)}) + + return ("board", board_params) + + fallback_params = { + "eventId": str(event.id), + "eventType": event.event_type, + "createdAt": event.created_at.isoformat(), + } + if event.task_id is not None: + fallback_params["taskId"] = str(event.task_id) + return ("activity", fallback_params) + + def _feed_item( event: ActivityEvent, task: Task, @@ -141,6 +181,46 @@ def _coerce_task_comment_rows( return rows +def _coerce_activity_rows( + items: Sequence[Any], +) -> list[tuple[ActivityEvent, UUID | None, UUID | None]]: + rows: list[tuple[ActivityEvent, UUID | None, UUID | None]] = [] + for item in items: + first: Any + second: Any + third: Any + + if isinstance(item, tuple): + if len(item) != 3: + msg = "Expected (ActivityEvent, event_board_id, task_board_id) rows" + raise TypeError(msg) + first, second, third = item + else: + try: + row_len = len(item) + first = item[0] + second = item[1] + third = item[2] + except (IndexError, KeyError, TypeError): + msg = "Expected (ActivityEvent, event_board_id, task_board_id) rows" + raise TypeError(msg) from None + if row_len != 3: + msg = "Expected (ActivityEvent, event_board_id, task_board_id) rows" + raise TypeError(msg) + + if not isinstance(first, ActivityEvent): + msg = "Expected (ActivityEvent, event_board_id, task_board_id) rows" + raise TypeError(msg) + if second is not None and not isinstance(second, UUID): + msg = "Expected (ActivityEvent, event_board_id, task_board_id) rows" + raise TypeError(msg) + if third is not None and not isinstance(third, UUID): + msg = "Expected (ActivityEvent, event_board_id, task_board_id) rows" + raise TypeError(msg) + rows.append((first, second, third)) + return rows + + async def _fetch_task_comment_events( session: AsyncSession, since: datetime, @@ -168,9 +248,16 @@ async def list_activity( actor: ActorContext = ACTOR_DEP, ) -> LimitOffsetPage[ActivityEventRead]: """List activity events visible to the calling actor.""" - statement = select(ActivityEvent) + statement: Any = ( + select( + ActivityEvent, + col(ActivityEvent.board_id).label("event_board_id"), + col(Task.board_id).label("task_board_id"), + ) + .outerjoin(Task, col(ActivityEvent.task_id) == col(Task.id)) + ) if actor.actor_type == "agent" and actor.agent: - statement = statement.where(ActivityEvent.agent_id == actor.agent.id) + statement = statement.where(col(ActivityEvent.agent_id) == actor.agent.id) elif actor.actor_type == "user" and actor.user: member = await get_active_membership(session, actor.user) if member is None: @@ -179,12 +266,34 @@ async def list_activity( if not board_ids: statement = statement.where(col(ActivityEvent.id).is_(None)) else: - statement = statement.join( - Task, - col(ActivityEvent.task_id) == col(Task.id), - ).where(col(Task.board_id).in_(board_ids)) + statement = statement.where( + or_( + col(ActivityEvent.board_id).in_(board_ids), + and_( + col(ActivityEvent.board_id).is_(None), + col(Task.board_id).in_(board_ids), + ), + ), + ) statement = statement.order_by(desc(col(ActivityEvent.created_at))) - return await paginate(session, statement) + + def _transform(items: Sequence[Any]) -> Sequence[Any]: + rows = _coerce_activity_rows(items) + events: list[ActivityEventRead] = [] + for event, event_board_id, task_board_id in rows: + payload = ActivityEventRead.model_validate(event, from_attributes=True) + resolved_board_id = event_board_id or task_board_id + payload.board_id = resolved_board_id + route_name, route_params = _build_activity_route( + event=event, + board_id=resolved_board_id, + ) + payload.route_name = route_name + payload.route_params = route_params + events.append(payload) + return events + + return await paginate(session, statement, transformer=_transform) @router.get( diff --git a/backend/app/api/agent.py b/backend/app/api/agent.py index 6d930b9e..54f34ae1 100644 --- a/backend/app/api/agent.py +++ b/backend/app/api/agent.py @@ -742,6 +742,7 @@ async def create_task( task_id=task.id, message=f"Task created by lead: {task.title}.", agent_id=agent_ctx.agent.id, + board_id=task.board_id, ) await session.commit() if task.assigned_agent_id: diff --git a/backend/app/api/approvals.py b/backend/app/api/approvals.py index 723444c0..43a37f0c 100644 --- a/backend/app/api/approvals.py +++ b/backend/app/api/approvals.py @@ -266,6 +266,7 @@ async def _notify_lead_on_approval_resolution( message=f"Lead agent notified for {approval.status} approval {approval.id}.", agent_id=lead.id, task_id=approval.task_id, + board_id=approval.board_id, ) else: record_activity( @@ -274,6 +275,7 @@ async def _notify_lead_on_approval_resolution( message=f"Lead notify failed for approval {approval.id}: {error}", agent_id=lead.id, task_id=approval.task_id, + board_id=approval.board_id, ) await session.commit() diff --git a/backend/app/api/boards.py b/backend/app/api/boards.py index 041dee33..d7b7e870 100644 --- a/backend/app/api/boards.py +++ b/backend/app/api/boards.py @@ -345,6 +345,7 @@ async def _notify_agents_on_board_group_change( f"{recipient_board.name} related to {board.name} and {group.name}." ), agent_id=agent.id, + board_id=recipient_board.id, ) else: failed += 1 @@ -356,6 +357,7 @@ async def _notify_agents_on_board_group_change( f"{recipient_board.name}: {error}" ), agent_id=agent.id, + board_id=recipient_board.id, ) if notified or failed: @@ -441,6 +443,7 @@ async def _notify_lead_on_board_update( event_type="board.lead_notified", message=f"Lead agent notified for board update: {board.name}.", agent_id=lead.id, + board_id=board.id, ) else: record_activity( @@ -448,6 +451,7 @@ async def _notify_lead_on_board_update( event_type="board.lead_notify_failed", message=f"Lead board update notify failed for {board.name}: {error}", agent_id=lead.id, + board_id=board.id, ) await session.commit() diff --git a/backend/app/api/metrics.py b/backend/app/api/metrics.py index 5b242d95..ba05e8be 100644 --- a/backend/app/api/metrics.py +++ b/backend/app/api/metrics.py @@ -18,12 +18,15 @@ from app.core.time import utcnow from app.db.session import get_session from app.models.activity_events import ActivityEvent from app.models.agents import Agent +from app.models.approvals import Approval from app.models.boards import Board from app.models.tasks import Task from app.schemas.metrics import ( DashboardBucketKey, DashboardKpis, DashboardMetrics, + DashboardPendingApproval, + DashboardPendingApprovals, DashboardRangeKey, DashboardRangeSeries, DashboardSeriesPoint, @@ -169,7 +172,7 @@ async def _query_throughput( bucket_col = func.date_trunc(range_spec.bucket, Task.updated_at).label("bucket") statement = ( select(bucket_col, func.count()) - .where(col(Task.status) == "review") + .where(col(Task.status) == "done") .where(col(Task.updated_at) >= range_spec.start) .where(col(Task.updated_at) <= range_spec.end) ) @@ -370,22 +373,87 @@ async def _active_agents( return int(result) -async def _tasks_in_progress( +async def _task_status_counts( session: AsyncSession, - range_spec: RangeSpec, board_ids: list[UUID], -) -> int: +) -> dict[str, int]: if not board_ids: - return 0 + return { + "inbox": 0, + "in_progress": 0, + "review": 0, + "done": 0, + } statement = ( - select(func.count()) - .where(col(Task.status) == "in_progress") - .where(col(Task.updated_at) >= range_spec.start) - .where(col(Task.updated_at) <= range_spec.end) + select(col(Task.status), func.count()) .where(col(Task.board_id).in_(board_ids)) + .group_by(col(Task.status)) ) - result = (await session.exec(statement)).one() - return int(result) + results = (await session.exec(statement)).all() + counts = { + "inbox": 0, + "in_progress": 0, + "review": 0, + "done": 0, + } + for status_value, total in results: + key = str(status_value) + if key in counts: + counts[key] = int(total or 0) + return counts + + +async def _pending_approvals_snapshot( + session: AsyncSession, + board_ids: list[UUID], + *, + limit: int = 10, +) -> DashboardPendingApprovals: + if not board_ids: + return DashboardPendingApprovals(total=0, items=[]) + + total_statement = ( + select(func.count(col(Approval.id))) + .where(col(Approval.board_id).in_(board_ids)) + .where(col(Approval.status) == "pending") + ) + total = int((await session.exec(total_statement)).one() or 0) + if total == 0: + return DashboardPendingApprovals(total=0, items=[]) + + rows = ( + await session.exec( + select( + col(Approval.id), + col(Approval.board_id), + col(Board.name), + col(Approval.action_type), + col(Approval.confidence), + col(Approval.created_at), + col(Task.title), + ) + .join(Board, col(Board.id) == col(Approval.board_id)) + .outerjoin(Task, col(Task.id) == col(Approval.task_id)) + .where(col(Approval.board_id).in_(board_ids)) + .where(col(Approval.status) == "pending") + .order_by(col(Approval.created_at).desc()) + .limit(limit) + ) + ).all() + + items = [ + DashboardPendingApproval( + approval_id=approval_id, + board_id=board_id, + board_name=board_name, + action_type=action_type, + confidence=float(confidence), + created_at=created_at, + task_title=task_title, + ) + for approval_id, board_id, board_name, action_type, confidence, created_at, task_title in rows + ] + return DashboardPendingApprovals(total=total, items=items) async def _resolve_dashboard_board_ids( @@ -461,10 +529,16 @@ async def dashboard_metrics( primary=wip_primary, comparison=wip_comparison, ) + task_status_counts = await _task_status_counts(session, board_ids) + pending_approvals = await _pending_approvals_snapshot(session, board_ids, limit=10) kpis = DashboardKpis( active_agents=await _active_agents(session, primary, board_ids), - tasks_in_progress=await _tasks_in_progress(session, primary, board_ids), + tasks_in_progress=task_status_counts["in_progress"], + inbox_tasks=task_status_counts["inbox"], + in_progress_tasks=task_status_counts["in_progress"], + review_tasks=task_status_counts["review"], + done_tasks=task_status_counts["done"], error_rate_pct=await _error_rate_kpi(session, primary, board_ids), median_cycle_time_hours_7d=await _median_cycle_time_for_range( session, @@ -481,4 +555,5 @@ async def dashboard_metrics( cycle_time=cycle_time, error_rate=error_rate, wip=wip, + pending_approvals=pending_approvals, ) diff --git a/backend/app/api/tasks.py b/backend/app/api/tasks.py index e5014c5f..d7469a1b 100644 --- a/backend/app/api/tasks.py +++ b/backend/app/api/tasks.py @@ -511,6 +511,7 @@ async def _reconcile_dependents_for_dependency_toggle( "Task returned to inbox: dependency reopened " f"({dependency_task.title})." ), agent_id=actor_agent_id, + board_id=dependent.board_id, ) else: record_activity( @@ -519,6 +520,7 @@ async def _reconcile_dependents_for_dependency_toggle( task_id=dependent.id, message=f"Dependency completion changed: {dependency_task.title}.", agent_id=actor_agent_id, + board_id=dependent.board_id, ) else: record_activity( @@ -527,6 +529,7 @@ async def _reconcile_dependents_for_dependency_toggle( task_id=dependent.id, message=f"Dependency completion changed: {dependency_task.title}.", agent_id=actor_agent_id, + board_id=dependent.board_id, ) @@ -686,6 +689,7 @@ async def _notify_agent_on_task_assign( message=f"Agent notified for assignment: {agent.name}.", agent_id=agent.id, task_id=task.id, + board_id=board.id, ) await session.commit() else: @@ -695,6 +699,7 @@ async def _notify_agent_on_task_assign( message=f"Assignee notify failed: {error}", agent_id=agent.id, task_id=task.id, + board_id=board.id, ) await session.commit() @@ -737,6 +742,7 @@ async def _notify_agent_on_task_rework( message=f"Assignee notified about requested changes: {agent.name}.", agent_id=agent.id, task_id=task.id, + board_id=board.id, ) await session.commit() else: @@ -746,6 +752,7 @@ async def _notify_agent_on_task_rework( message=f"Rework notify failed: {error}", agent_id=agent.id, task_id=task.id, + board_id=board.id, ) await session.commit() @@ -810,6 +817,7 @@ async def _notify_lead_on_task_create( message=f"Lead agent notified for task: {task.title}.", agent_id=lead.id, task_id=task.id, + board_id=board.id, ) await session.commit() else: @@ -819,6 +827,7 @@ async def _notify_lead_on_task_create( message=f"Lead notify failed: {error}", agent_id=lead.id, task_id=task.id, + board_id=board.id, ) await session.commit() @@ -867,6 +876,7 @@ async def _notify_lead_on_task_unassigned( message=f"Lead notified task returned to inbox: {task.title}.", agent_id=lead.id, task_id=task.id, + board_id=board.id, ) await session.commit() else: @@ -876,6 +886,7 @@ async def _notify_lead_on_task_unassigned( message=f"Lead notify failed: {error}", agent_id=lead.id, task_id=task.id, + board_id=board.id, ) await session.commit() @@ -1300,7 +1311,10 @@ def _task_event_payload( resolved_custom_field_values_by_task_id = custom_field_values_by_task_id or {} payload: dict[str, object] = { "type": event.event_type, - "activity": ActivityEventRead.model_validate(event).model_dump(mode="json"), + "activity": ActivityEventRead.model_validate(event).model_dump( + mode="json", + exclude={"board_id", "route_name", "route_params"}, + ), } if event.event_type == "task.comment": payload["comment"] = _serialize_comment(event) @@ -1500,6 +1514,7 @@ async def create_task( event_type="task.created", task_id=task.id, message=f"Task created: {task.title}.", + board_id=board.id, ) await session.commit() await _notify_lead_on_task_create(session=session, board=board, task=task) @@ -2258,6 +2273,7 @@ async def _apply_lead_task_update( task_id=update.task.id, message=message, agent_id=update.actor.agent.id, + board_id=update.board_id, ) await _reconcile_dependents_for_dependency_toggle( session, @@ -2443,6 +2459,7 @@ async def _record_task_comment_from_update( event_type="task.comment", message=update.comment, task_id=update.task.id, + board_id=update.task.board_id, agent_id=( update.actor.agent.id if update.actor.actor_type == "agent" and update.actor.agent @@ -2470,6 +2487,7 @@ async def _record_task_update_activity( task_id=update.task.id, message=message, agent_id=actor_agent_id, + board_id=update.board_id, ) await _reconcile_dependents_for_dependency_toggle( session, @@ -2669,6 +2687,7 @@ async def create_task_comment( event_type="task.comment", message=payload.message, task_id=task.id, + board_id=task.board_id, agent_id=_comment_actor_id(actor), ) session.add(event) diff --git a/backend/app/models/activity_events.py b/backend/app/models/activity_events.py index d5315fe8..4eb1db95 100644 --- a/backend/app/models/activity_events.py +++ b/backend/app/models/activity_events.py @@ -14,7 +14,7 @@ RUNTIME_ANNOTATION_TYPES = (datetime,) class ActivityEvent(QueryModel, table=True): - """Discrete activity event tied to tasks and agents.""" + """Discrete activity event tied to board/task/agent context.""" __tablename__ = "activity_events" # pyright: ignore[reportAssignmentType] @@ -23,4 +23,5 @@ class ActivityEvent(QueryModel, table=True): message: str | None = None agent_id: UUID | None = Field(default=None, foreign_key="agents.id", index=True) task_id: UUID | None = Field(default=None, foreign_key="tasks.id", index=True) + board_id: UUID | None = Field(default=None, foreign_key="boards.id", index=True) created_at: datetime = Field(default_factory=utcnow) diff --git a/backend/app/schemas/activity_events.py b/backend/app/schemas/activity_events.py index 8c02dd4b..6d5df20d 100644 --- a/backend/app/schemas/activity_events.py +++ b/backend/app/schemas/activity_events.py @@ -18,6 +18,9 @@ class ActivityEventRead(SQLModel): message: str | None agent_id: UUID | None task_id: UUID | None + board_id: UUID | None = None + route_name: str | None = None + route_params: dict[str, str] | None = None created_at: datetime diff --git a/backend/app/schemas/metrics.py b/backend/app/schemas/metrics.py index 6a21ce48..23c6e139 100644 --- a/backend/app/schemas/metrics.py +++ b/backend/app/schemas/metrics.py @@ -4,10 +4,11 @@ from __future__ import annotations from datetime import datetime from typing import Literal +from uuid import UUID from sqlmodel import SQLModel -RUNTIME_ANNOTATION_TYPES = (datetime,) +RUNTIME_ANNOTATION_TYPES = (datetime, UUID) DashboardRangeKey = Literal["24h", "3d", "7d", "14d", "1m", "3m", "6m", "1y"] DashboardBucketKey = Literal["hour", "day", "week", "month"] @@ -64,10 +65,33 @@ class DashboardKpis(SQLModel): active_agents: int tasks_in_progress: int + inbox_tasks: int + in_progress_tasks: int + review_tasks: int + done_tasks: int error_rate_pct: float median_cycle_time_hours_7d: float | None +class DashboardPendingApproval(SQLModel): + """Single pending approval item for cross-board dashboard listing.""" + + approval_id: UUID + board_id: UUID + board_name: str + action_type: str + confidence: float + created_at: datetime + task_title: str | None = None + + +class DashboardPendingApprovals(SQLModel): + """Pending approval snapshot used on the dashboard.""" + + total: int + items: list[DashboardPendingApproval] + + class DashboardMetrics(SQLModel): """Complete dashboard metrics response payload.""" @@ -78,3 +102,4 @@ class DashboardMetrics(SQLModel): cycle_time: DashboardSeriesSet error_rate: DashboardSeriesSet wip: DashboardWipSeriesSet + pending_approvals: DashboardPendingApprovals diff --git a/backend/app/services/activity_log.py b/backend/app/services/activity_log.py index 9d7f7d77..04b382ed 100644 --- a/backend/app/services/activity_log.py +++ b/backend/app/services/activity_log.py @@ -19,6 +19,7 @@ def record_activity( message: str, agent_id: UUID | None = None, task_id: UUID | None = None, + board_id: UUID | None = None, ) -> ActivityEvent: """Create and attach an activity event row to the current DB session.""" event = ActivityEvent( @@ -26,6 +27,7 @@ def record_activity( message=message, agent_id=agent_id, task_id=task_id, + board_id=board_id, ) session.add(event) return event diff --git a/backend/app/services/board_lifecycle.py b/backend/app/services/board_lifecycle.py index a7ec2d74..fffbca64 100644 --- a/backend/app/services/board_lifecycle.py +++ b/backend/app/services/board_lifecycle.py @@ -91,6 +91,12 @@ async def delete_board(session: AsyncSession, *, board: Board) -> OkResponse: col(TaskCustomFieldValue.task_id).in_(task_ids), commit=False, ) + await crud.delete_where( + session, + ActivityEvent, + col(ActivityEvent.board_id) == board.id, + commit=False, + ) # Keep teardown ordered around FK/reference chains so dependent rows are gone # before deleting their parent task/agent/board records. await crud.delete_where( diff --git a/backend/app/services/openclaw/coordination_service.py b/backend/app/services/openclaw/coordination_service.py index 8c9817c5..8b6d8365 100644 --- a/backend/app/services/openclaw/coordination_service.py +++ b/backend/app/services/openclaw/coordination_service.py @@ -204,6 +204,7 @@ class GatewayCoordinationService(AbstractGatewayMessagingService): event_type="agent.nudge.failed", message=f"Nudge failed for {target.name}: {exc}", agent_id=actor_agent.id, + board_id=board.id, ) await self.session.commit() self.logger.error( @@ -233,6 +234,7 @@ class GatewayCoordinationService(AbstractGatewayMessagingService): event_type="agent.nudge.sent", message=f"Nudge sent to {target.name}.", agent_id=actor_agent.id, + board_id=board.id, ) await self.session.commit() self.logger.info( @@ -397,6 +399,7 @@ class GatewayCoordinationService(AbstractGatewayMessagingService): event_type="agent.soul.updated", message=note, agent_id=actor_agent_id, + board_id=board.id, ) await self.session.commit() self.logger.info( @@ -470,6 +473,7 @@ class GatewayCoordinationService(AbstractGatewayMessagingService): event_type="gateway.lead.ask_user.failed", message=f"Lead user question failed for {board.name}: {exc}", agent_id=actor_agent.id, + board_id=board.id, ) await self.session.commit() self.logger.error( @@ -501,6 +505,7 @@ class GatewayCoordinationService(AbstractGatewayMessagingService): event_type="gateway.lead.ask_user.sent", message=f"Lead requested user info via gateway agent for board: {board.name}.", agent_id=actor_agent.id, + board_id=board.id, ) main_agent = await Agent.objects.filter_by(gateway_id=gateway.id, board_id=None).first( self.session, @@ -595,6 +600,7 @@ class GatewayCoordinationService(AbstractGatewayMessagingService): event_type="gateway.main.lead_message.failed", message=f"Lead message failed for {board.name}: {exc}", agent_id=actor_agent.id, + board_id=board.id, ) await self.session.commit() self.logger.error( @@ -626,6 +632,7 @@ class GatewayCoordinationService(AbstractGatewayMessagingService): event_type="gateway.main.lead_message.sent", message=f"Sent {payload.kind} to lead for board: {board.name}.", agent_id=actor_agent.id, + board_id=board.id, ) await self.session.commit() self.logger.info( diff --git a/backend/app/services/openclaw/provisioning_db.py b/backend/app/services/openclaw/provisioning_db.py index 15954a56..15f8e684 100644 --- a/backend/app/services/openclaw/provisioning_db.py +++ b/backend/app/services/openclaw/provisioning_db.py @@ -942,6 +942,7 @@ class AgentLifecycleService(OpenClawDBService): event_type="agent.heartbeat", message=f"Heartbeat received from {agent.name}.", agent_id=agent.id, + board_id=agent.board_id, ) @staticmethod @@ -957,6 +958,7 @@ class AgentLifecycleService(OpenClawDBService): event_type=f"agent.{action}.failed", message=f"{action_label} message failed: {error}", agent_id=agent.id, + board_id=agent.board_id, ) async def coerce_agent_create_payload( @@ -1114,12 +1116,14 @@ class AgentLifecycleService(OpenClawDBService): event_type=f"agent.{action}.direct", message=f"{action.capitalize()}d directly for {provisioned.name}.", agent_id=provisioned.id, + board_id=provisioned.board_id, ) record_activity( self.session, event_type="agent.wakeup.sent", message=f"Wakeup message sent to {provisioned.name}.", agent_id=provisioned.id, + board_id=provisioned.board_id, ) await self.session.commit() self.logger.info( @@ -1818,6 +1822,7 @@ class AgentLifecycleService(OpenClawDBService): event_type="agent.delete.direct", message=f"Deleted agent {agent.name}.", agent_id=None, + board_id=agent.board_id, ) now = utcnow() await crud.update_where( diff --git a/backend/migrations/versions/a9b1c2d3e4f7_add_board_id_to_activity_events.py b/backend/migrations/versions/a9b1c2d3e4f7_add_board_id_to_activity_events.py new file mode 100644 index 00000000..ea46c51f --- /dev/null +++ b/backend/migrations/versions/a9b1c2d3e4f7_add_board_id_to_activity_events.py @@ -0,0 +1,66 @@ +"""add board_id to activity_events + +Revision ID: a9b1c2d3e4f7 +Revises: f1b2c3d4e5a6 +Create Date: 2026-03-04 18:20:00.000000 + +""" + +from __future__ import annotations + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = "a9b1c2d3e4f7" +down_revision = "f1b2c3d4e5a6" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.add_column("activity_events", sa.Column("board_id", sa.Uuid(), nullable=True)) + op.execute( + """ + UPDATE activity_events AS ae + SET board_id = t.board_id + FROM tasks AS t + WHERE ae.task_id = t.id + AND ae.board_id IS NULL + """ + ) + op.execute( + """ + UPDATE activity_events AS ae + SET board_id = a.board_id + FROM agents AS a + WHERE ae.agent_id = a.id + AND ae.board_id IS NULL + AND a.board_id IS NOT NULL + """ + ) + op.create_foreign_key( + "fk_activity_events_board_id_boards", + "activity_events", + "boards", + ["board_id"], + ["id"], + ondelete="CASCADE", + ) + op.create_index( + op.f("ix_activity_events_board_id"), + "activity_events", + ["board_id"], + unique=False, + ) + + +def downgrade() -> None: + op.drop_index(op.f("ix_activity_events_board_id"), table_name="activity_events") + op.drop_constraint( + "fk_activity_events_board_id_boards", + "activity_events", + type_="foreignkey", + ) + op.drop_column("activity_events", "board_id") diff --git a/backend/tests/test_activity_api_rows.py b/backend/tests/test_activity_api_rows.py index a412e4de..f632afb4 100644 --- a/backend/tests/test_activity_api_rows.py +++ b/backend/tests/test_activity_api_rows.py @@ -5,7 +5,7 @@ from uuid import uuid4 import pytest -from app.api.activity import _coerce_task_comment_rows +from app.api.activity import _build_activity_route, _coerce_activity_rows, _coerce_task_comment_rows from app.models.activity_events import ActivityEvent from app.models.agents import Agent from app.models.boards import Board @@ -34,6 +34,25 @@ class _FakeSqlRow4: raise IndexError(index) +@dataclass +class _FakeSqlRow3: + first: object + second: object + third: object + + def __len__(self) -> int: + return 3 + + def __getitem__(self, index: int) -> object: + if index == 0: + return self.first + if index == 1: + return self.second + if index == 2: + return self.third + raise IndexError(index) + + def _make_event() -> ActivityEvent: return ActivityEvent(event_type="task.comment", message="hello") @@ -87,3 +106,71 @@ def test_coerce_task_comment_rows_rejects_invalid_values(): match="Expected \\(ActivityEvent, Task, Board, Agent \\| None\\) rows", ): _coerce_task_comment_rows([(uuid4(), task, board, None)]) + + +def test_coerce_activity_rows_accepts_plain_tuple(): + board_id = uuid4() + event = _make_event() + + rows = _coerce_activity_rows([(event, board_id, None)]) + assert rows == [(event, board_id, None)] + + +def test_coerce_activity_rows_accepts_row_like_values(): + board_id = uuid4() + event = _make_event() + row = _FakeSqlRow3(event, board_id, None) + + rows = _coerce_activity_rows([row]) + assert rows == [(event, board_id, None)] + + +def test_coerce_activity_rows_rejects_invalid_values(): + event = _make_event() + with pytest.raises( + TypeError, + match=( + "Expected \\(ActivityEvent, event_board_id, task_board_id\\) rows" + ), + ): + _coerce_activity_rows([(event, "bad", None)]) + + +def test_build_activity_route_board_comment(): + board_id = uuid4() + task_id = uuid4() + event = ActivityEvent( + event_type="task.comment", + task_id=task_id, + message="hello", + ) + route_name, route_params = _build_activity_route(event=event, board_id=board_id) + assert route_name == "board" + assert route_params == { + "boardId": str(board_id), + "taskId": str(task_id), + "commentId": str(event.id), + } + + +def test_build_activity_route_board_approvals(): + board_id = uuid4() + event = ActivityEvent( + event_type="approval.lead_notified", + message="hello", + ) + route_name, route_params = _build_activity_route(event=event, board_id=board_id) + assert route_name == "board.approvals" + assert route_params == {"boardId": str(board_id)} + + +def test_build_activity_route_global_fallback(): + event = ActivityEvent( + event_type="gateway.main.lead_broadcast.sent", + message="hello", + ) + route_name, route_params = _build_activity_route(event=event, board_id=None) + assert route_name == "activity" + assert route_params["eventId"] == str(event.id) + assert route_params["eventType"] == event.event_type + assert route_params["createdAt"] == event.created_at.isoformat() diff --git a/backend/tests/test_boards_delete.py b/backend/tests/test_boards_delete.py index 228cdb69..926abfd8 100644 --- a/backend/tests/test_boards_delete.py +++ b/backend/tests/test_boards_delete.py @@ -62,6 +62,7 @@ async def test_delete_board_cleans_org_board_access_rows() -> None: ) deleted_table_names = [statement.table.name for statement in session.executed] + assert "activity_events" in deleted_table_names assert "organization_board_access" in deleted_table_names assert "organization_invite_board_access" in deleted_table_names assert "board_task_custom_fields" in deleted_table_names diff --git a/backend/tests/test_metrics_kpis.py b/backend/tests/test_metrics_kpis.py new file mode 100644 index 00000000..ce33cdbb --- /dev/null +++ b/backend/tests/test_metrics_kpis.py @@ -0,0 +1,130 @@ +from __future__ import annotations + +from datetime import datetime +from uuid import uuid4 + +import pytest + +from app.api import metrics as metrics_api + + +class _ExecResult: + def __init__(self, rows: list[tuple[str, int]]) -> None: + self._rows = rows + + def all(self) -> list[tuple[str, int]]: + return self._rows + + +class _FakeSession: + def __init__(self, rows: list[tuple[str, int]]) -> None: + self._rows = rows + + async def exec(self, _statement: object) -> _ExecResult: + return _ExecResult(self._rows) + + +class _ExecOneResult: + def __init__(self, value: int) -> None: + self._value = value + + def one(self) -> int: + return self._value + + +class _ExecAllResult: + def __init__(self, rows: list[tuple[object, ...]]) -> None: + self._rows = rows + + def all(self) -> list[tuple[object, ...]]: + return self._rows + + +class _SequentialSession: + def __init__(self, responses: list[object]) -> None: + self._responses = responses + self._index = 0 + + async def exec(self, _statement: object) -> object: + response = self._responses[self._index] + self._index += 1 + return response + + +@pytest.mark.asyncio +async def test_task_status_counts_returns_zeroes_for_empty_board_scope() -> None: + counts = await metrics_api._task_status_counts(_FakeSession([]), []) + + assert counts == { + "inbox": 0, + "in_progress": 0, + "review": 0, + "done": 0, + } + + +@pytest.mark.asyncio +async def test_task_status_counts_maps_known_statuses() -> None: + session = _FakeSession( + [ + ("inbox", 4), + ("in_progress", 3), + ("review", 2), + ("done", 7), + ("blocked", 99), + ], + ) + + counts = await metrics_api._task_status_counts(session, [uuid4()]) + + assert counts == { + "inbox": 4, + "in_progress": 3, + "review": 2, + "done": 7, + } + + +@pytest.mark.asyncio +async def test_pending_approvals_snapshot_returns_empty_for_empty_scope() -> None: + snapshot = await metrics_api._pending_approvals_snapshot(_SequentialSession([]), []) + + assert snapshot.total == 0 + assert snapshot.items == [] + + +@pytest.mark.asyncio +async def test_pending_approvals_snapshot_maps_rows() -> None: + approval_id = uuid4() + board_id = uuid4() + created_at = datetime(2026, 3, 4, 12, 0, 0) + rows: list[tuple[object, ...]] = [ + ( + approval_id, + board_id, + "Operations Board", + "approve_task", + 87.0, + created_at, + "Validate rollout checklist", + ) + ] + session = _SequentialSession( + [ + _ExecOneResult(3), + _ExecAllResult(rows), + ] + ) + + snapshot = await metrics_api._pending_approvals_snapshot(session, [board_id], limit=10) + + assert snapshot.total == 3 + assert len(snapshot.items) == 1 + item = snapshot.items[0] + assert item.approval_id == approval_id + assert item.board_id == board_id + assert item.board_name == "Operations Board" + assert item.action_type == "approve_task" + assert item.confidence == 87.0 + assert item.created_at == created_at + assert item.task_title == "Validate rollout checklist" diff --git a/frontend/src/api/generated/agent/agent.ts b/frontend/src/api/generated/agent/agent.ts index 66627b96..a419702c 100644 --- a/frontend/src/api/generated/agent/agent.ts +++ b/frontend/src/api/generated/agent/agent.ts @@ -68,43 +68,58 @@ import { customFetch } from "../../mutator"; type SecondParameter unknown> = Parameters[1]; /** - * Token-authenticated liveness probe for agent API clients. + * Return agents visible to the caller, optionally filtered by board. -Use this endpoint when the caller needs to verify both service availability and agent-token validity in one request. - * @summary Agent Auth Health Check +Use when downstream routing or coordination needs recipient actors. + * @summary List visible agents */ -export type agentHealthzApiV1AgentHealthzGetResponse200 = { - data: AgentHealthStatusResponse; +export type listAgentsApiV1AgentAgentsGetResponse200 = { + data: LimitOffsetPageTypeVarCustomizedAgentRead; status: 200; }; -export type agentHealthzApiV1AgentHealthzGetResponse422 = { +export type listAgentsApiV1AgentAgentsGetResponse422 = { data: HTTPValidationError; status: 422; }; -export type agentHealthzApiV1AgentHealthzGetResponseSuccess = - agentHealthzApiV1AgentHealthzGetResponse200 & { +export type listAgentsApiV1AgentAgentsGetResponseSuccess = + listAgentsApiV1AgentAgentsGetResponse200 & { headers: Headers; }; -export type agentHealthzApiV1AgentHealthzGetResponseError = - agentHealthzApiV1AgentHealthzGetResponse422 & { +export type listAgentsApiV1AgentAgentsGetResponseError = + listAgentsApiV1AgentAgentsGetResponse422 & { headers: Headers; }; -export type agentHealthzApiV1AgentHealthzGetResponse = - | agentHealthzApiV1AgentHealthzGetResponseSuccess - | agentHealthzApiV1AgentHealthzGetResponseError; +export type listAgentsApiV1AgentAgentsGetResponse = + | listAgentsApiV1AgentAgentsGetResponseSuccess + | listAgentsApiV1AgentAgentsGetResponseError; -export const getAgentHealthzApiV1AgentHealthzGetUrl = () => { - return `/api/v1/agent/healthz`; +export const getListAgentsApiV1AgentAgentsGetUrl = ( + params?: ListAgentsApiV1AgentAgentsGetParams, +) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 + ? `/api/v1/agent/agents?${stringifiedParams}` + : `/api/v1/agent/agents`; }; -export const agentHealthzApiV1AgentHealthzGet = async ( +export const listAgentsApiV1AgentAgentsGet = async ( + params?: ListAgentsApiV1AgentAgentsGetParams, options?: RequestInit, -): Promise => { - return customFetch( - getAgentHealthzApiV1AgentHealthzGetUrl(), +): Promise => { + return customFetch( + getListAgentsApiV1AgentAgentsGetUrl(params), { ...options, method: "GET", @@ -112,62 +127,68 @@ export const agentHealthzApiV1AgentHealthzGet = async ( ); }; -export const getAgentHealthzApiV1AgentHealthzGetQueryKey = () => { - return [`/api/v1/agent/healthz`] as const; +export const getListAgentsApiV1AgentAgentsGetQueryKey = ( + params?: ListAgentsApiV1AgentAgentsGetParams, +) => { + return [`/api/v1/agent/agents`, ...(params ? [params] : [])] as const; }; -export const getAgentHealthzApiV1AgentHealthzGetQueryOptions = < - TData = Awaited>, +export const getListAgentsApiV1AgentAgentsGetQueryOptions = < + TData = Awaited>, TError = HTTPValidationError, ->(options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; -}) => { +>( + params?: ListAgentsApiV1AgentAgentsGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, +) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = - queryOptions?.queryKey ?? getAgentHealthzApiV1AgentHealthzGetQueryKey(); + queryOptions?.queryKey ?? getListAgentsApiV1AgentAgentsGetQueryKey(params); const queryFn: QueryFunction< - Awaited> + Awaited> > = ({ signal }) => - agentHealthzApiV1AgentHealthzGet({ signal, ...requestOptions }); + listAgentsApiV1AgentAgentsGet(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, + Awaited>, TError, TData > & { queryKey: DataTag }; }; -export type AgentHealthzApiV1AgentHealthzGetQueryResult = NonNullable< - Awaited> +export type ListAgentsApiV1AgentAgentsGetQueryResult = NonNullable< + Awaited> >; -export type AgentHealthzApiV1AgentHealthzGetQueryError = HTTPValidationError; +export type ListAgentsApiV1AgentAgentsGetQueryError = HTTPValidationError; -export function useAgentHealthzApiV1AgentHealthzGet< - TData = Awaited>, +export function useListAgentsApiV1AgentAgentsGet< + TData = Awaited>, TError = HTTPValidationError, >( + params: undefined | ListAgentsApiV1AgentAgentsGetParams, options: { query: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > > & Pick< DefinedInitialDataOptions< - Awaited>, + Awaited>, TError, - Awaited> + Awaited> >, "initialData" >; @@ -177,23 +198,24 @@ export function useAgentHealthzApiV1AgentHealthzGet< ): DefinedUseQueryResult & { queryKey: DataTag; }; -export function useAgentHealthzApiV1AgentHealthzGet< - TData = Awaited>, +export function useListAgentsApiV1AgentAgentsGet< + TData = Awaited>, TError = HTTPValidationError, >( + params?: ListAgentsApiV1AgentAgentsGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > > & Pick< UndefinedInitialDataOptions< - Awaited>, + Awaited>, TError, - Awaited> + Awaited> >, "initialData" >; @@ -203,14 +225,15 @@ export function useAgentHealthzApiV1AgentHealthzGet< ): UseQueryResult & { queryKey: DataTag; }; -export function useAgentHealthzApiV1AgentHealthzGet< - TData = Awaited>, +export function useListAgentsApiV1AgentAgentsGet< + TData = Awaited>, TError = HTTPValidationError, >( + params?: ListAgentsApiV1AgentAgentsGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -222,17 +245,18 @@ export function useAgentHealthzApiV1AgentHealthzGet< queryKey: DataTag; }; /** - * @summary Agent Auth Health Check + * @summary List visible agents */ -export function useAgentHealthzApiV1AgentHealthzGet< - TData = Awaited>, +export function useListAgentsApiV1AgentAgentsGet< + TData = Awaited>, TError = HTTPValidationError, >( + params?: ListAgentsApiV1AgentAgentsGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -243,7 +267,10 @@ export function useAgentHealthzApiV1AgentHealthzGet< ): UseQueryResult & { queryKey: DataTag; } { - const queryOptions = getAgentHealthzApiV1AgentHealthzGetQueryOptions(options); + const queryOptions = getListAgentsApiV1AgentAgentsGetQueryOptions( + params, + options, + ); const query = useQuery(queryOptions, queryClient) as UseQueryResult< TData, @@ -253,6 +280,139 @@ export function useAgentHealthzApiV1AgentHealthzGet< return { ...query, queryKey: queryOptions.queryKey }; } +/** + * Register a new board agent and attach it to the lead's board. + +The target board is derived from the caller identity and cannot be changed in payload. + * @summary Create a board agent as lead + */ +export type agentLeadCreateAgentResponse200 = { + data: AgentRead; + status: 200; +}; + +export type agentLeadCreateAgentResponse403 = { + data: LLMErrorResponse; + status: 403; +}; + +export type agentLeadCreateAgentResponse409 = { + data: LLMErrorResponse; + status: 409; +}; + +export type agentLeadCreateAgentResponse422 = { + data: LLMErrorResponse; + status: 422; +}; + +export type agentLeadCreateAgentResponseSuccess = + agentLeadCreateAgentResponse200 & { + headers: Headers; + }; +export type agentLeadCreateAgentResponseError = ( + | agentLeadCreateAgentResponse403 + | agentLeadCreateAgentResponse409 + | agentLeadCreateAgentResponse422 +) & { + headers: Headers; +}; + +export type agentLeadCreateAgentResponse = + | agentLeadCreateAgentResponseSuccess + | agentLeadCreateAgentResponseError; + +export const getAgentLeadCreateAgentUrl = () => { + return `/api/v1/agent/agents`; +}; + +export const agentLeadCreateAgent = async ( + agentCreate: AgentCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getAgentLeadCreateAgentUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(agentCreate), + }, + ); +}; + +export const getAgentLeadCreateAgentMutationOptions = < + TError = LLMErrorResponse, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { data: AgentCreate }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { data: AgentCreate }, + TContext +> => { + const mutationKey = ["agentLeadCreateAgent"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { data: AgentCreate } + > = (props) => { + const { data } = props ?? {}; + + return agentLeadCreateAgent(data, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type AgentLeadCreateAgentMutationResult = NonNullable< + Awaited> +>; +export type AgentLeadCreateAgentMutationBody = AgentCreate; +export type AgentLeadCreateAgentMutationError = LLMErrorResponse; + +/** + * @summary Create a board agent as lead + */ +export const useAgentLeadCreateAgent = < + TError = LLMErrorResponse, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { data: AgentCreate }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { data: AgentCreate }, + TContext +> => { + return useMutation( + getAgentLeadCreateAgentMutationOptions(options), + queryClient, + ); +}; /** * Return boards the authenticated agent can access. @@ -672,36 +832,745 @@ export function useGetBoardApiV1AgentBoardsBoardIdGet< } /** - * Return agents visible to the caller, optionally filtered by board. + * Permanently remove a board agent and tear down associated lifecycle state. -Use when downstream routing or coordination needs recipient actors. - * @summary List visible agents +Use sparingly; prefer reassignment for continuity-sensitive teams. + * @summary Delete a board agent as lead */ -export type listAgentsApiV1AgentAgentsGetResponse200 = { - data: LimitOffsetPageTypeVarCustomizedAgentRead; +export type agentLeadDeleteBoardAgentResponse200 = { + data: OkResponse; status: 200; }; -export type listAgentsApiV1AgentAgentsGetResponse422 = { +export type agentLeadDeleteBoardAgentResponse403 = { + data: LLMErrorResponse; + status: 403; +}; + +export type agentLeadDeleteBoardAgentResponse404 = { + data: LLMErrorResponse; + status: 404; +}; + +export type agentLeadDeleteBoardAgentResponse422 = { data: HTTPValidationError; status: 422; }; -export type listAgentsApiV1AgentAgentsGetResponseSuccess = - listAgentsApiV1AgentAgentsGetResponse200 & { +export type agentLeadDeleteBoardAgentResponseSuccess = + agentLeadDeleteBoardAgentResponse200 & { headers: Headers; }; -export type listAgentsApiV1AgentAgentsGetResponseError = - listAgentsApiV1AgentAgentsGetResponse422 & { +export type agentLeadDeleteBoardAgentResponseError = ( + | agentLeadDeleteBoardAgentResponse403 + | agentLeadDeleteBoardAgentResponse404 + | agentLeadDeleteBoardAgentResponse422 +) & { + headers: Headers; +}; + +export type agentLeadDeleteBoardAgentResponse = + | agentLeadDeleteBoardAgentResponseSuccess + | agentLeadDeleteBoardAgentResponseError; + +export const getAgentLeadDeleteBoardAgentUrl = ( + boardId: string, + agentId: string, +) => { + return `/api/v1/agent/boards/${boardId}/agents/${agentId}`; +}; + +export const agentLeadDeleteBoardAgent = async ( + boardId: string, + agentId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getAgentLeadDeleteBoardAgentUrl(boardId, agentId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getAgentLeadDeleteBoardAgentMutationOptions = < + TError = LLMErrorResponse | HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string }, + TContext +> => { + const mutationKey = ["agentLeadDeleteBoardAgent"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { boardId: string; agentId: string } + > = (props) => { + const { boardId, agentId } = props ?? {}; + + return agentLeadDeleteBoardAgent(boardId, agentId, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type AgentLeadDeleteBoardAgentMutationResult = NonNullable< + Awaited> +>; + +export type AgentLeadDeleteBoardAgentMutationError = + | LLMErrorResponse + | HTTPValidationError; + +/** + * @summary Delete a board agent as lead + */ +export const useAgentLeadDeleteBoardAgent = < + TError = LLMErrorResponse | HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { boardId: string; agentId: string }, + TContext +> => { + return useMutation( + getAgentLeadDeleteBoardAgentMutationOptions(options), + queryClient, + ); +}; +/** + * Send a direct coordination message to a specific board agent. + +Use this when a lead sees stalled, idle, or misaligned work. + * @summary Nudge an agent on a board + */ +export type agentLeadNudgeAgentResponse200 = { + data: OkResponse; + status: 200; +}; + +export type agentLeadNudgeAgentResponse403 = { + data: LLMErrorResponse; + status: 403; +}; + +export type agentLeadNudgeAgentResponse404 = { + data: LLMErrorResponse; + status: 404; +}; + +export type agentLeadNudgeAgentResponse422 = { + data: LLMErrorResponse; + status: 422; +}; + +export type agentLeadNudgeAgentResponse502 = { + data: LLMErrorResponse; + status: 502; +}; + +export type agentLeadNudgeAgentResponseSuccess = + agentLeadNudgeAgentResponse200 & { + headers: Headers; + }; +export type agentLeadNudgeAgentResponseError = ( + | agentLeadNudgeAgentResponse403 + | agentLeadNudgeAgentResponse404 + | agentLeadNudgeAgentResponse422 + | agentLeadNudgeAgentResponse502 +) & { + headers: Headers; +}; + +export type agentLeadNudgeAgentResponse = + | agentLeadNudgeAgentResponseSuccess + | agentLeadNudgeAgentResponseError; + +export const getAgentLeadNudgeAgentUrl = (boardId: string, agentId: string) => { + return `/api/v1/agent/boards/${boardId}/agents/${agentId}/nudge`; +}; + +export const agentLeadNudgeAgent = async ( + boardId: string, + agentId: string, + agentNudge: AgentNudge, + options?: RequestInit, +): Promise => { + return customFetch( + getAgentLeadNudgeAgentUrl(boardId, agentId), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(agentNudge), + }, + ); +}; + +export const getAgentLeadNudgeAgentMutationOptions = < + TError = LLMErrorResponse, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string; data: AgentNudge }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string; data: AgentNudge }, + TContext +> => { + const mutationKey = ["agentLeadNudgeAgent"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { boardId: string; agentId: string; data: AgentNudge } + > = (props) => { + const { boardId, agentId, data } = props ?? {}; + + return agentLeadNudgeAgent(boardId, agentId, data, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type AgentLeadNudgeAgentMutationResult = NonNullable< + Awaited> +>; +export type AgentLeadNudgeAgentMutationBody = AgentNudge; +export type AgentLeadNudgeAgentMutationError = LLMErrorResponse; + +/** + * @summary Nudge an agent on a board + */ +export const useAgentLeadNudgeAgent = < + TError = LLMErrorResponse, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string; data: AgentNudge }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { boardId: string; agentId: string; data: AgentNudge }, + TContext +> => { + return useMutation( + getAgentLeadNudgeAgentMutationOptions(options), + queryClient, + ); +}; +/** + * Fetch an agent's SOUL.md content. + +Allowed for board lead, or for an agent reading its own SOUL. + * @summary Get Agent Soul + */ +export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse200 = + { + data: string; + status: 200; + }; + +export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse422 = + { + data: HTTPValidationError; + status: 422; + }; + +export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseSuccess = + getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse200 & { + headers: Headers; + }; +export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseError = + getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse422 & { headers: Headers; }; -export type listAgentsApiV1AgentAgentsGetResponse = - | listAgentsApiV1AgentAgentsGetResponseSuccess - | listAgentsApiV1AgentAgentsGetResponseError; +export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse = + | getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseSuccess + | getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseError; -export const getListAgentsApiV1AgentAgentsGetUrl = ( - params?: ListAgentsApiV1AgentAgentsGetParams, +export const getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetUrl = ( + boardId: string, + agentId: string, +) => { + return `/api/v1/agent/boards/${boardId}/agents/${agentId}/soul`; +}; + +export const getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet = async ( + boardId: string, + agentId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetUrl( + boardId, + agentId, + ), + { + ...options, + method: "GET", + }, + ); +}; + +export const getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryKey = + (boardId: string, agentId: string) => { + return [`/api/v1/agent/boards/${boardId}/agents/${agentId}/soul`] as const; + }; + +export const getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryOptions = + < + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, + >( + boardId: string, + agentId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + ) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryKey( + boardId, + agentId, + ); + + const queryFn: QueryFunction< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + > + > = ({ signal }) => + getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet( + boardId, + agentId, + { signal, ...requestOptions }, + ); + + return { + queryKey, + queryFn, + enabled: !!(boardId && agentId), + ...queryOptions, + } as UseQueryOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + TData + > & { queryKey: DataTag }; + }; + +export type GetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type GetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryError = + HTTPValidationError; + +export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + agentId: string, + options: { + query: Partial< + UseQueryOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + agentId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + agentId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary Get Agent Soul + */ + +export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + agentId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType< + typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet + > + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryOptions( + boardId, + agentId, + options, + ); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Write SOUL.md content for a board agent and persist it for reprovisioning. + +Use this when role instructions or behavior guardrails need updates. + * @summary Update an agent's SOUL template + */ +export type agentLeadUpdateAgentSoulResponse200 = { + data: OkResponse; + status: 200; +}; + +export type agentLeadUpdateAgentSoulResponse403 = { + data: LLMErrorResponse; + status: 403; +}; + +export type agentLeadUpdateAgentSoulResponse404 = { + data: LLMErrorResponse; + status: 404; +}; + +export type agentLeadUpdateAgentSoulResponse422 = { + data: LLMErrorResponse; + status: 422; +}; + +export type agentLeadUpdateAgentSoulResponse502 = { + data: LLMErrorResponse; + status: 502; +}; + +export type agentLeadUpdateAgentSoulResponseSuccess = + agentLeadUpdateAgentSoulResponse200 & { + headers: Headers; + }; +export type agentLeadUpdateAgentSoulResponseError = ( + | agentLeadUpdateAgentSoulResponse403 + | agentLeadUpdateAgentSoulResponse404 + | agentLeadUpdateAgentSoulResponse422 + | agentLeadUpdateAgentSoulResponse502 +) & { + headers: Headers; +}; + +export type agentLeadUpdateAgentSoulResponse = + | agentLeadUpdateAgentSoulResponseSuccess + | agentLeadUpdateAgentSoulResponseError; + +export const getAgentLeadUpdateAgentSoulUrl = ( + boardId: string, + agentId: string, +) => { + return `/api/v1/agent/boards/${boardId}/agents/${agentId}/soul`; +}; + +export const agentLeadUpdateAgentSoul = async ( + boardId: string, + agentId: string, + soulUpdateRequest: SoulUpdateRequest, + options?: RequestInit, +): Promise => { + return customFetch( + getAgentLeadUpdateAgentSoulUrl(boardId, agentId), + { + ...options, + method: "PUT", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(soulUpdateRequest), + }, + ); +}; + +export const getAgentLeadUpdateAgentSoulMutationOptions = < + TError = LLMErrorResponse, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string; data: SoulUpdateRequest }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string; data: SoulUpdateRequest }, + TContext +> => { + const mutationKey = ["agentLeadUpdateAgentSoul"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { boardId: string; agentId: string; data: SoulUpdateRequest } + > = (props) => { + const { boardId, agentId, data } = props ?? {}; + + return agentLeadUpdateAgentSoul(boardId, agentId, data, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type AgentLeadUpdateAgentSoulMutationResult = NonNullable< + Awaited> +>; +export type AgentLeadUpdateAgentSoulMutationBody = SoulUpdateRequest; +export type AgentLeadUpdateAgentSoulMutationError = LLMErrorResponse; + +/** + * @summary Update an agent's SOUL template + */ +export const useAgentLeadUpdateAgentSoul = < + TError = LLMErrorResponse, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; agentId: string; data: SoulUpdateRequest }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { boardId: string; agentId: string; data: SoulUpdateRequest }, + TContext +> => { + return useMutation( + getAgentLeadUpdateAgentSoulMutationOptions(options), + queryClient, + ); +}; +/** + * List approvals for a board. + +Use status filtering to process pending approvals efficiently. + * @summary List Approvals + */ +export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse200 = { + data: LimitOffsetPageTypeVarCustomizedApprovalRead; + status: 200; +}; + +export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseSuccess = + listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse200 & { + headers: Headers; + }; +export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseError = + listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse422 & { + headers: Headers; + }; + +export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse = + | listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseSuccess + | listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseError; + +export const getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetUrl = ( + boardId: string, + params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, ) => { const normalizedParams = new URLSearchParams(); @@ -714,16 +1583,17 @@ export const getListAgentsApiV1AgentAgentsGetUrl = ( const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 - ? `/api/v1/agent/agents?${stringifiedParams}` - : `/api/v1/agent/agents`; + ? `/api/v1/agent/boards/${boardId}/approvals?${stringifiedParams}` + : `/api/v1/agent/boards/${boardId}/approvals`; }; -export const listAgentsApiV1AgentAgentsGet = async ( - params?: ListAgentsApiV1AgentAgentsGetParams, +export const listApprovalsApiV1AgentBoardsBoardIdApprovalsGet = async ( + boardId: string, + params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, options?: RequestInit, -): Promise => { - return customFetch( - getListAgentsApiV1AgentAgentsGetUrl(params), +): Promise => { + return customFetch( + getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetUrl(boardId, params), { ...options, method: "GET", @@ -731,21 +1601,30 @@ export const listAgentsApiV1AgentAgentsGet = async ( ); }; -export const getListAgentsApiV1AgentAgentsGetQueryKey = ( - params?: ListAgentsApiV1AgentAgentsGetParams, +export const getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryKey = ( + boardId: string, + params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, ) => { - return [`/api/v1/agent/agents`, ...(params ? [params] : [])] as const; + return [ + `/api/v1/agent/boards/${boardId}/approvals`, + ...(params ? [params] : []), + ] as const; }; -export const getListAgentsApiV1AgentAgentsGetQueryOptions = < - TData = Awaited>, +export const getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryOptions = < + TData = Awaited< + ReturnType + >, TError = HTTPValidationError, >( - params?: ListAgentsApiV1AgentAgentsGetParams, + boardId: string, + params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited< + ReturnType + >, TError, TData > @@ -756,43 +1635,68 @@ export const getListAgentsApiV1AgentAgentsGetQueryOptions = < const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = - queryOptions?.queryKey ?? getListAgentsApiV1AgentAgentsGetQueryKey(params); + queryOptions?.queryKey ?? + getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryKey( + boardId, + params, + ); const queryFn: QueryFunction< - Awaited> + Awaited> > = ({ signal }) => - listAgentsApiV1AgentAgentsGet(params, { signal, ...requestOptions }); + listApprovalsApiV1AgentBoardsBoardIdApprovalsGet(boardId, params, { + signal, + ...requestOptions, + }); - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, + return { + queryKey, + queryFn, + enabled: !!boardId, + ...queryOptions, + } as UseQueryOptions< + Awaited< + ReturnType + >, TError, TData > & { queryKey: DataTag }; }; -export type ListAgentsApiV1AgentAgentsGetQueryResult = NonNullable< - Awaited> ->; -export type ListAgentsApiV1AgentAgentsGetQueryError = HTTPValidationError; +export type ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryResult = + NonNullable< + Awaited> + >; +export type ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryError = + HTTPValidationError; -export function useListAgentsApiV1AgentAgentsGet< - TData = Awaited>, +export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< + TData = Awaited< + ReturnType + >, TError = HTTPValidationError, >( - params: undefined | ListAgentsApiV1AgentAgentsGetParams, + boardId: string, + params: undefined | ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, options: { query: Partial< UseQueryOptions< - Awaited>, + Awaited< + ReturnType + >, TError, TData > > & Pick< DefinedInitialDataOptions< - Awaited>, + Awaited< + ReturnType + >, TError, - Awaited> + Awaited< + ReturnType + > >, "initialData" >; @@ -802,24 +1706,33 @@ export function useListAgentsApiV1AgentAgentsGet< ): DefinedUseQueryResult & { queryKey: DataTag; }; -export function useListAgentsApiV1AgentAgentsGet< - TData = Awaited>, +export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< + TData = Awaited< + ReturnType + >, TError = HTTPValidationError, >( - params?: ListAgentsApiV1AgentAgentsGetParams, + boardId: string, + params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited< + ReturnType + >, TError, TData > > & Pick< UndefinedInitialDataOptions< - Awaited>, + Awaited< + ReturnType + >, TError, - Awaited> + Awaited< + ReturnType + > >, "initialData" >; @@ -829,15 +1742,20 @@ export function useListAgentsApiV1AgentAgentsGet< ): UseQueryResult & { queryKey: DataTag; }; -export function useListAgentsApiV1AgentAgentsGet< - TData = Awaited>, +export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< + TData = Awaited< + ReturnType + >, TError = HTTPValidationError, >( - params?: ListAgentsApiV1AgentAgentsGetParams, + boardId: string, + params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited< + ReturnType + >, TError, TData > @@ -849,18 +1767,23 @@ export function useListAgentsApiV1AgentAgentsGet< queryKey: DataTag; }; /** - * @summary List visible agents + * @summary List Approvals */ -export function useListAgentsApiV1AgentAgentsGet< - TData = Awaited>, +export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< + TData = Awaited< + ReturnType + >, TError = HTTPValidationError, >( - params?: ListAgentsApiV1AgentAgentsGetParams, + boardId: string, + params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited< + ReturnType + >, TError, TData > @@ -871,8 +1794,1077 @@ export function useListAgentsApiV1AgentAgentsGet< ): UseQueryResult & { queryKey: DataTag; } { - const queryOptions = getListAgentsApiV1AgentAgentsGetQueryOptions( - params, + const queryOptions = + getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryOptions( + boardId, + params, + options, + ); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Create an approval request for risky or low-confidence actions. + +Include `task_id` or `task_ids` to scope the decision precisely. + * @summary Create Approval + */ +export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse200 = { + data: ApprovalRead; + status: 200; +}; + +export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseSuccess = + createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse200 & { + headers: Headers; + }; +export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseError = + createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse422 & { + headers: Headers; + }; + +export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse = + | createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseSuccess + | createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseError; + +export const getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostUrl = ( + boardId: string, +) => { + return `/api/v1/agent/boards/${boardId}/approvals`; +}; + +export const createApprovalApiV1AgentBoardsBoardIdApprovalsPost = async ( + boardId: string, + approvalCreate: ApprovalCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostUrl(boardId), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(approvalCreate), + }, + ); +}; + +export const getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: ApprovalCreate }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: ApprovalCreate }, + TContext + > => { + const mutationKey = ["createApprovalApiV1AgentBoardsBoardIdApprovalsPost"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType + >, + { boardId: string; data: ApprovalCreate } + > = (props) => { + const { boardId, data } = props ?? {}; + + return createApprovalApiV1AgentBoardsBoardIdApprovalsPost( + boardId, + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type CreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type CreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationBody = + ApprovalCreate; +export type CreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationError = + HTTPValidationError; + +/** + * @summary Create Approval + */ +export const useCreateApprovalApiV1AgentBoardsBoardIdApprovalsPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: ApprovalCreate }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: ApprovalCreate }, + TContext +> => { + return useMutation( + getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationOptions( + options, + ), + queryClient, + ); +}; +/** + * Escalate a high-impact decision or ambiguity through the gateway-main interaction channel. + +Use when lead-level context needs human confirmation or consent. + * @summary Ask the human via gateway-main + */ +export type agentLeadAskUserViaGatewayMainResponse200 = { + data: GatewayMainAskUserResponse; + status: 200; +}; + +export type agentLeadAskUserViaGatewayMainResponse403 = { + data: LLMErrorResponse; + status: 403; +}; + +export type agentLeadAskUserViaGatewayMainResponse404 = { + data: LLMErrorResponse; + status: 404; +}; + +export type agentLeadAskUserViaGatewayMainResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type agentLeadAskUserViaGatewayMainResponse502 = { + data: LLMErrorResponse; + status: 502; +}; + +export type agentLeadAskUserViaGatewayMainResponseSuccess = + agentLeadAskUserViaGatewayMainResponse200 & { + headers: Headers; + }; +export type agentLeadAskUserViaGatewayMainResponseError = ( + | agentLeadAskUserViaGatewayMainResponse403 + | agentLeadAskUserViaGatewayMainResponse404 + | agentLeadAskUserViaGatewayMainResponse422 + | agentLeadAskUserViaGatewayMainResponse502 +) & { + headers: Headers; +}; + +export type agentLeadAskUserViaGatewayMainResponse = + | agentLeadAskUserViaGatewayMainResponseSuccess + | agentLeadAskUserViaGatewayMainResponseError; + +export const getAgentLeadAskUserViaGatewayMainUrl = (boardId: string) => { + return `/api/v1/agent/boards/${boardId}/gateway/main/ask-user`; +}; + +export const agentLeadAskUserViaGatewayMain = async ( + boardId: string, + gatewayMainAskUserRequest: GatewayMainAskUserRequest, + options?: RequestInit, +): Promise => { + return customFetch( + getAgentLeadAskUserViaGatewayMainUrl(boardId), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(gatewayMainAskUserRequest), + }, + ); +}; + +export const getAgentLeadAskUserViaGatewayMainMutationOptions = < + TError = LLMErrorResponse | HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; data: GatewayMainAskUserRequest }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { boardId: string; data: GatewayMainAskUserRequest }, + TContext +> => { + const mutationKey = ["agentLeadAskUserViaGatewayMain"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { boardId: string; data: GatewayMainAskUserRequest } + > = (props) => { + const { boardId, data } = props ?? {}; + + return agentLeadAskUserViaGatewayMain(boardId, data, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type AgentLeadAskUserViaGatewayMainMutationResult = NonNullable< + Awaited> +>; +export type AgentLeadAskUserViaGatewayMainMutationBody = + GatewayMainAskUserRequest; +export type AgentLeadAskUserViaGatewayMainMutationError = + | LLMErrorResponse + | HTTPValidationError; + +/** + * @summary Ask the human via gateway-main + */ +export const useAgentLeadAskUserViaGatewayMain = < + TError = LLMErrorResponse | HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; data: GatewayMainAskUserRequest }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { boardId: string; data: GatewayMainAskUserRequest }, + TContext +> => { + return useMutation( + getAgentLeadAskUserViaGatewayMainMutationOptions(options), + queryClient, + ); +}; +/** + * List board memory with optional chat filtering. + +Use `is_chat=false` for durable context and `is_chat=true` for board chat. + * @summary List Board Memory + */ +export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse200 = { + data: LimitOffsetPageTypeVarCustomizedBoardMemoryRead; + status: 200; +}; + +export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseSuccess = + listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse200 & { + headers: Headers; + }; +export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseError = + listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse422 & { + headers: Headers; + }; + +export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse = + | listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseSuccess + | listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseError; + +export const getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetUrl = ( + boardId: string, + params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, +) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 + ? `/api/v1/agent/boards/${boardId}/memory?${stringifiedParams}` + : `/api/v1/agent/boards/${boardId}/memory`; +}; + +export const listBoardMemoryApiV1AgentBoardsBoardIdMemoryGet = async ( + boardId: string, + params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, + options?: RequestInit, +): Promise => { + return customFetch( + getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetUrl(boardId, params), + { + ...options, + method: "GET", + }, + ); +}; + +export const getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryKey = ( + boardId: string, + params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, +) => { + return [ + `/api/v1/agent/boards/${boardId}/memory`, + ...(params ? [params] : []), + ] as const; +}; + +export const getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryOptions = < + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, +) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryKey(boardId, params); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + listBoardMemoryApiV1AgentBoardsBoardIdMemoryGet(boardId, params, { + signal, + ...requestOptions, + }); + + return { + queryKey, + queryFn, + enabled: !!boardId, + ...queryOptions, + } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryResult = + NonNullable< + Awaited> + >; +export type ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryError = + HTTPValidationError; + +export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params: undefined | ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, + options: { + query: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary List Board Memory + */ + +export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryOptions( + boardId, + params, + options, + ); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Create a board memory entry. + +Use tags to indicate purpose (e.g. `chat`, `decision`, `plan`, `handoff`). + * @summary Create Board Memory + */ +export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse200 = { + data: BoardMemoryRead; + status: 200; +}; + +export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseSuccess = + createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse200 & { + headers: Headers; + }; +export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseError = + createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse422 & { + headers: Headers; + }; + +export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse = + | createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseSuccess + | createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseError; + +export const getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostUrl = ( + boardId: string, +) => { + return `/api/v1/agent/boards/${boardId}/memory`; +}; + +export const createBoardMemoryApiV1AgentBoardsBoardIdMemoryPost = async ( + boardId: string, + boardMemoryCreate: BoardMemoryCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostUrl(boardId), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(boardMemoryCreate), + }, + ); +}; + +export const getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardMemoryCreate }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardMemoryCreate }, + TContext + > => { + const mutationKey = ["createBoardMemoryApiV1AgentBoardsBoardIdMemoryPost"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType + >, + { boardId: string; data: BoardMemoryCreate } + > = (props) => { + const { boardId, data } = props ?? {}; + + return createBoardMemoryApiV1AgentBoardsBoardIdMemoryPost( + boardId, + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type CreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type CreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationBody = + BoardMemoryCreate; +export type CreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationError = + HTTPValidationError; + +/** + * @summary Create Board Memory + */ +export const useCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardMemoryCreate }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardMemoryCreate }, + TContext +> => { + return useMutation( + getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationOptions( + options, + ), + queryClient, + ); +}; +/** + * Apply board onboarding updates from an agent workflow. + +Used during structured objective/success-metric intake loops. + * @summary Update Onboarding + */ +export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse200 = { + data: BoardOnboardingRead; + status: 200; +}; + +export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseSuccess = + updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse200 & { + headers: Headers; + }; +export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseError = + updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse422 & { + headers: Headers; + }; + +export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse = + | updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseSuccess + | updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseError; + +export const getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostUrl = ( + boardId: string, +) => { + return `/api/v1/agent/boards/${boardId}/onboarding`; +}; + +export const updateOnboardingApiV1AgentBoardsBoardIdOnboardingPost = async ( + boardId: string, + boardOnboardingAgentCompleteBoardOnboardingAgentQuestion: + | BoardOnboardingAgentComplete + | BoardOnboardingAgentQuestion, + options?: RequestInit, +): Promise => { + return customFetch( + getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostUrl(boardId), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify( + boardOnboardingAgentCompleteBoardOnboardingAgentQuestion, + ), + }, + ); +}; + +export const getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { + boardId: string; + data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; + }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { + boardId: string; + data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; + }, + TContext + > => { + const mutationKey = [ + "updateOnboardingApiV1AgentBoardsBoardIdOnboardingPost", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType + >, + { + boardId: string; + data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; + } + > = (props) => { + const { boardId, data } = props ?? {}; + + return updateOnboardingApiV1AgentBoardsBoardIdOnboardingPost( + boardId, + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type UpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type UpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationBody = + | BoardOnboardingAgentComplete + | BoardOnboardingAgentQuestion; +export type UpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationError = + HTTPValidationError; + +/** + * @summary Update Onboarding + */ +export const useUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { + boardId: string; + data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; + }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { + boardId: string; + data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; + }, + TContext +> => { + return useMutation( + getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationOptions( + options, + ), + queryClient, + ); +}; +/** + * List available tags for the board's organization. + +Use returned ids in task create/update payloads (`tag_ids`). + * @summary List Tags + */ +export type listTagsApiV1AgentBoardsBoardIdTagsGetResponse200 = { + data: TagRef[]; + status: 200; +}; + +export type listTagsApiV1AgentBoardsBoardIdTagsGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type listTagsApiV1AgentBoardsBoardIdTagsGetResponseSuccess = + listTagsApiV1AgentBoardsBoardIdTagsGetResponse200 & { + headers: Headers; + }; +export type listTagsApiV1AgentBoardsBoardIdTagsGetResponseError = + listTagsApiV1AgentBoardsBoardIdTagsGetResponse422 & { + headers: Headers; + }; + +export type listTagsApiV1AgentBoardsBoardIdTagsGetResponse = + | listTagsApiV1AgentBoardsBoardIdTagsGetResponseSuccess + | listTagsApiV1AgentBoardsBoardIdTagsGetResponseError; + +export const getListTagsApiV1AgentBoardsBoardIdTagsGetUrl = ( + boardId: string, +) => { + return `/api/v1/agent/boards/${boardId}/tags`; +}; + +export const listTagsApiV1AgentBoardsBoardIdTagsGet = async ( + boardId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getListTagsApiV1AgentBoardsBoardIdTagsGetUrl(boardId), + { + ...options, + method: "GET", + }, + ); +}; + +export const getListTagsApiV1AgentBoardsBoardIdTagsGetQueryKey = ( + boardId: string, +) => { + return [`/api/v1/agent/boards/${boardId}/tags`] as const; +}; + +export const getListTagsApiV1AgentBoardsBoardIdTagsGetQueryOptions = < + TData = Awaited>, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, +) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getListTagsApiV1AgentBoardsBoardIdTagsGetQueryKey(boardId); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + listTagsApiV1AgentBoardsBoardIdTagsGet(boardId, { + signal, + ...requestOptions, + }); + + return { + queryKey, + queryFn, + enabled: !!boardId, + ...queryOptions, + } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type ListTagsApiV1AgentBoardsBoardIdTagsGetQueryResult = NonNullable< + Awaited> +>; +export type ListTagsApiV1AgentBoardsBoardIdTagsGetQueryError = + HTTPValidationError; + +export function useListTagsApiV1AgentBoardsBoardIdTagsGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + boardId: string, + options: { + query: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useListTagsApiV1AgentBoardsBoardIdTagsGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useListTagsApiV1AgentBoardsBoardIdTagsGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary List Tags + */ + +export function useListTagsApiV1AgentBoardsBoardIdTagsGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = getListTagsApiV1AgentBoardsBoardIdTagsGetQueryOptions( + boardId, options, ); @@ -884,139 +2876,6 @@ export function useListAgentsApiV1AgentAgentsGet< return { ...query, queryKey: queryOptions.queryKey }; } -/** - * Register a new board agent and attach it to the lead's board. - -The target board is derived from the caller identity and cannot be changed in payload. - * @summary Create a board agent as lead - */ -export type agentLeadCreateAgentResponse200 = { - data: AgentRead; - status: 200; -}; - -export type agentLeadCreateAgentResponse403 = { - data: LLMErrorResponse; - status: 403; -}; - -export type agentLeadCreateAgentResponse409 = { - data: LLMErrorResponse; - status: 409; -}; - -export type agentLeadCreateAgentResponse422 = { - data: LLMErrorResponse; - status: 422; -}; - -export type agentLeadCreateAgentResponseSuccess = - agentLeadCreateAgentResponse200 & { - headers: Headers; - }; -export type agentLeadCreateAgentResponseError = ( - | agentLeadCreateAgentResponse403 - | agentLeadCreateAgentResponse409 - | agentLeadCreateAgentResponse422 -) & { - headers: Headers; -}; - -export type agentLeadCreateAgentResponse = - | agentLeadCreateAgentResponseSuccess - | agentLeadCreateAgentResponseError; - -export const getAgentLeadCreateAgentUrl = () => { - return `/api/v1/agent/agents`; -}; - -export const agentLeadCreateAgent = async ( - agentCreate: AgentCreate, - options?: RequestInit, -): Promise => { - return customFetch( - getAgentLeadCreateAgentUrl(), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(agentCreate), - }, - ); -}; - -export const getAgentLeadCreateAgentMutationOptions = < - TError = LLMErrorResponse, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { data: AgentCreate }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { data: AgentCreate }, - TContext -> => { - const mutationKey = ["agentLeadCreateAgent"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { data: AgentCreate } - > = (props) => { - const { data } = props ?? {}; - - return agentLeadCreateAgent(data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type AgentLeadCreateAgentMutationResult = NonNullable< - Awaited> ->; -export type AgentLeadCreateAgentMutationBody = AgentCreate; -export type AgentLeadCreateAgentMutationError = LLMErrorResponse; - -/** - * @summary Create a board agent as lead - */ -export const useAgentLeadCreateAgent = < - TError = LLMErrorResponse, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { data: AgentCreate }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { data: AgentCreate }, - TContext -> => { - return useMutation( - getAgentLeadCreateAgentMutationOptions(options), - queryClient, - ); -}; /** * List tasks on a board with status/assignment filters. @@ -1396,216 +3255,145 @@ export const useAgentLeadCreateTask = < ); }; /** - * List available tags for the board's organization. + * Delete a board task and related records. -Use returned ids in task create/update payloads (`tag_ids`). - * @summary List Tags +This action is restricted to board lead agents. + * @summary Delete a task as board lead */ -export type listTagsApiV1AgentBoardsBoardIdTagsGetResponse200 = { - data: TagRef[]; +export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse200 = { + data: OkResponse; status: 200; }; -export type listTagsApiV1AgentBoardsBoardIdTagsGetResponse422 = { +export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse422 = { data: HTTPValidationError; status: 422; }; -export type listTagsApiV1AgentBoardsBoardIdTagsGetResponseSuccess = - listTagsApiV1AgentBoardsBoardIdTagsGetResponse200 & { +export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseSuccess = + deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse200 & { headers: Headers; }; -export type listTagsApiV1AgentBoardsBoardIdTagsGetResponseError = - listTagsApiV1AgentBoardsBoardIdTagsGetResponse422 & { +export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseError = + deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse422 & { headers: Headers; }; -export type listTagsApiV1AgentBoardsBoardIdTagsGetResponse = - | listTagsApiV1AgentBoardsBoardIdTagsGetResponseSuccess - | listTagsApiV1AgentBoardsBoardIdTagsGetResponseError; +export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse = + | deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseSuccess + | deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseError; -export const getListTagsApiV1AgentBoardsBoardIdTagsGetUrl = ( +export const getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteUrl = ( boardId: string, + taskId: string, ) => { - return `/api/v1/agent/boards/${boardId}/tags`; + return `/api/v1/agent/boards/${boardId}/tasks/${taskId}`; }; -export const listTagsApiV1AgentBoardsBoardIdTagsGet = async ( +export const deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete = async ( boardId: string, + taskId: string, options?: RequestInit, -): Promise => { - return customFetch( - getListTagsApiV1AgentBoardsBoardIdTagsGetUrl(boardId), +): Promise => { + return customFetch( + getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteUrl(boardId, taskId), { ...options, - method: "GET", + method: "DELETE", }, ); }; -export const getListTagsApiV1AgentBoardsBoardIdTagsGetQueryKey = ( - boardId: string, -) => { - return [`/api/v1/agent/boards/${boardId}/tags`] as const; -}; - -export const getListTagsApiV1AgentBoardsBoardIdTagsGetQueryOptions = < - TData = Awaited>, - TError = HTTPValidationError, ->( - boardId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > +export const getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; taskId: string }, + TContext >; request?: SecondParameter; - }, -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getListTagsApiV1AgentBoardsBoardIdTagsGetQueryKey(boardId); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - listTagsApiV1AgentBoardsBoardIdTagsGet(boardId, { - signal, - ...requestOptions, - }); - - return { - queryKey, - queryFn, - enabled: !!boardId, - ...queryOptions, - } as UseQueryOptions< - Awaited>, + }): UseMutationOptions< + Awaited< + ReturnType + >, TError, - TData - > & { queryKey: DataTag }; -}; + { boardId: string; taskId: string }, + TContext + > => { + const mutationKey = ["deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; -export type ListTagsApiV1AgentBoardsBoardIdTagsGetQueryResult = NonNullable< - Awaited> ->; -export type ListTagsApiV1AgentBoardsBoardIdTagsGetQueryError = + const mutationFn: MutationFunction< + Awaited< + ReturnType + >, + { boardId: string; taskId: string } + > = (props) => { + const { boardId, taskId } = props ?? {}; + + return deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete( + boardId, + taskId, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type DeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationResult = + NonNullable< + Awaited< + ReturnType + > + >; + +export type DeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationError = HTTPValidationError; -export function useListTagsApiV1AgentBoardsBoardIdTagsGet< - TData = Awaited>, - TError = HTTPValidationError, ->( - boardId: string, - options: { - query: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited>, - TError, - Awaited> - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useListTagsApiV1AgentBoardsBoardIdTagsGet< - TData = Awaited>, - TError = HTTPValidationError, ->( - boardId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited>, - TError, - Awaited> - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useListTagsApiV1AgentBoardsBoardIdTagsGet< - TData = Awaited>, - TError = HTTPValidationError, ->( - boardId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; /** - * @summary List Tags + * @summary Delete a task as board lead */ - -export function useListTagsApiV1AgentBoardsBoardIdTagsGet< - TData = Awaited>, +export const useDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete = < TError = HTTPValidationError, + TContext = unknown, >( - boardId: string, options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; taskId: string }, + TContext >; request?: SecondParameter; }, queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = getListTagsApiV1AgentBoardsBoardIdTagsGetQueryOptions( - boardId, - options, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { boardId: string; taskId: string }, + TContext +> => { + return useMutation( + getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationOptions( + options, + ), + queryClient, ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - +}; /** * Update a task after board-level authorization checks. @@ -1749,146 +3537,6 @@ export const useUpdateTaskApiV1AgentBoardsBoardIdTasksTaskIdPatch = < queryClient, ); }; -/** - * Delete a board task and related records. - -This action is restricted to board lead agents. - * @summary Delete a task as board lead - */ -export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseSuccess = - deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseError = - deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponse = - | deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseSuccess - | deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteResponseError; - -export const getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteUrl = ( - boardId: string, - taskId: string, -) => { - return `/api/v1/agent/boards/${boardId}/tasks/${taskId}`; -}; - -export const deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete = async ( - boardId: string, - taskId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteUrl(boardId, taskId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; taskId: string }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; taskId: string }, - TContext - > => { - const mutationKey = ["deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType - >, - { boardId: string; taskId: string } - > = (props) => { - const { boardId, taskId } = props ?? {}; - - return deleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete( - boardId, - taskId, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type DeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationResult = - NonNullable< - Awaited< - ReturnType - > - >; - -export type DeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete a task as board lead - */ -export const useDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; taskId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { boardId: string; taskId: string }, - TContext -> => { - return useMutation( - getDeleteTaskApiV1AgentBoardsBoardIdTasksTaskIdDeleteMutationOptions( - options, - ), - queryClient, - ); -}; /** * List task comments visible to the authenticated agent. @@ -2387,1956 +4035,6 @@ export const useCreateTaskCommentApiV1AgentBoardsBoardIdTasksTaskIdCommentsPost queryClient, ); }; -/** - * List board memory with optional chat filtering. - -Use `is_chat=false` for durable context and `is_chat=true` for board chat. - * @summary List Board Memory - */ -export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse200 = { - data: LimitOffsetPageTypeVarCustomizedBoardMemoryRead; - status: 200; -}; - -export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseSuccess = - listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse200 & { - headers: Headers; - }; -export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseError = - listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse422 & { - headers: Headers; - }; - -export type listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponse = - | listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseSuccess - | listBoardMemoryApiV1AgentBoardsBoardIdMemoryGetResponseError; - -export const getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetUrl = ( - boardId: string, - params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, -) => { - const normalizedParams = new URLSearchParams(); - - Object.entries(params || {}).forEach(([key, value]) => { - if (value !== undefined) { - normalizedParams.append(key, value === null ? "null" : value.toString()); - } - }); - - const stringifiedParams = normalizedParams.toString(); - - return stringifiedParams.length > 0 - ? `/api/v1/agent/boards/${boardId}/memory?${stringifiedParams}` - : `/api/v1/agent/boards/${boardId}/memory`; -}; - -export const listBoardMemoryApiV1AgentBoardsBoardIdMemoryGet = async ( - boardId: string, - params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, - options?: RequestInit, -): Promise => { - return customFetch( - getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetUrl(boardId, params), - { - ...options, - method: "GET", - }, - ); -}; - -export const getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryKey = ( - boardId: string, - params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, -) => { - return [ - `/api/v1/agent/boards/${boardId}/memory`, - ...(params ? [params] : []), - ] as const; -}; - -export const getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryOptions = < - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryKey(boardId, params); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - listBoardMemoryApiV1AgentBoardsBoardIdMemoryGet(boardId, params, { - signal, - ...requestOptions, - }); - - return { - queryKey, - queryFn, - enabled: !!boardId, - ...queryOptions, - } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryResult = - NonNullable< - Awaited> - >; -export type ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryError = - HTTPValidationError; - -export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params: undefined | ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary List Board Memory - */ - -export function useListBoardMemoryApiV1AgentBoardsBoardIdMemoryGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getListBoardMemoryApiV1AgentBoardsBoardIdMemoryGetQueryOptions( - boardId, - params, - options, - ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * Create a board memory entry. - -Use tags to indicate purpose (e.g. `chat`, `decision`, `plan`, `handoff`). - * @summary Create Board Memory - */ -export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse200 = { - data: BoardMemoryRead; - status: 200; -}; - -export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseSuccess = - createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse200 & { - headers: Headers; - }; -export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseError = - createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse422 & { - headers: Headers; - }; - -export type createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponse = - | createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseSuccess - | createBoardMemoryApiV1AgentBoardsBoardIdMemoryPostResponseError; - -export const getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostUrl = ( - boardId: string, -) => { - return `/api/v1/agent/boards/${boardId}/memory`; -}; - -export const createBoardMemoryApiV1AgentBoardsBoardIdMemoryPost = async ( - boardId: string, - boardMemoryCreate: BoardMemoryCreate, - options?: RequestInit, -): Promise => { - return customFetch( - getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostUrl(boardId), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(boardMemoryCreate), - }, - ); -}; - -export const getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardMemoryCreate }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardMemoryCreate }, - TContext - > => { - const mutationKey = ["createBoardMemoryApiV1AgentBoardsBoardIdMemoryPost"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType - >, - { boardId: string; data: BoardMemoryCreate } - > = (props) => { - const { boardId, data } = props ?? {}; - - return createBoardMemoryApiV1AgentBoardsBoardIdMemoryPost( - boardId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type CreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type CreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationBody = - BoardMemoryCreate; -export type CreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationError = - HTTPValidationError; - -/** - * @summary Create Board Memory - */ -export const useCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardMemoryCreate }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardMemoryCreate }, - TContext -> => { - return useMutation( - getCreateBoardMemoryApiV1AgentBoardsBoardIdMemoryPostMutationOptions( - options, - ), - queryClient, - ); -}; -/** - * List approvals for a board. - -Use status filtering to process pending approvals efficiently. - * @summary List Approvals - */ -export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse200 = { - data: LimitOffsetPageTypeVarCustomizedApprovalRead; - status: 200; -}; - -export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseSuccess = - listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse200 & { - headers: Headers; - }; -export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseError = - listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse422 & { - headers: Headers; - }; - -export type listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponse = - | listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseSuccess - | listApprovalsApiV1AgentBoardsBoardIdApprovalsGetResponseError; - -export const getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetUrl = ( - boardId: string, - params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, -) => { - const normalizedParams = new URLSearchParams(); - - Object.entries(params || {}).forEach(([key, value]) => { - if (value !== undefined) { - normalizedParams.append(key, value === null ? "null" : value.toString()); - } - }); - - const stringifiedParams = normalizedParams.toString(); - - return stringifiedParams.length > 0 - ? `/api/v1/agent/boards/${boardId}/approvals?${stringifiedParams}` - : `/api/v1/agent/boards/${boardId}/approvals`; -}; - -export const listApprovalsApiV1AgentBoardsBoardIdApprovalsGet = async ( - boardId: string, - params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, - options?: RequestInit, -): Promise => { - return customFetch( - getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetUrl(boardId, params), - { - ...options, - method: "GET", - }, - ); -}; - -export const getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryKey = ( - boardId: string, - params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, -) => { - return [ - `/api/v1/agent/boards/${boardId}/approvals`, - ...(params ? [params] : []), - ] as const; -}; - -export const getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryOptions = < - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryKey( - boardId, - params, - ); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - listApprovalsApiV1AgentBoardsBoardIdApprovalsGet(boardId, params, { - signal, - ...requestOptions, - }); - - return { - queryKey, - queryFn, - enabled: !!boardId, - ...queryOptions, - } as UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryResult = - NonNullable< - Awaited> - >; -export type ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryError = - HTTPValidationError; - -export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params: undefined | ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary List Approvals - */ - -export function useListApprovalsApiV1AgentBoardsBoardIdApprovalsGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: ListApprovalsApiV1AgentBoardsBoardIdApprovalsGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getListApprovalsApiV1AgentBoardsBoardIdApprovalsGetQueryOptions( - boardId, - params, - options, - ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * Create an approval request for risky or low-confidence actions. - -Include `task_id` or `task_ids` to scope the decision precisely. - * @summary Create Approval - */ -export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse200 = { - data: ApprovalRead; - status: 200; -}; - -export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseSuccess = - createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse200 & { - headers: Headers; - }; -export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseError = - createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse422 & { - headers: Headers; - }; - -export type createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponse = - | createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseSuccess - | createApprovalApiV1AgentBoardsBoardIdApprovalsPostResponseError; - -export const getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostUrl = ( - boardId: string, -) => { - return `/api/v1/agent/boards/${boardId}/approvals`; -}; - -export const createApprovalApiV1AgentBoardsBoardIdApprovalsPost = async ( - boardId: string, - approvalCreate: ApprovalCreate, - options?: RequestInit, -): Promise => { - return customFetch( - getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostUrl(boardId), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(approvalCreate), - }, - ); -}; - -export const getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: ApprovalCreate }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: ApprovalCreate }, - TContext - > => { - const mutationKey = ["createApprovalApiV1AgentBoardsBoardIdApprovalsPost"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType - >, - { boardId: string; data: ApprovalCreate } - > = (props) => { - const { boardId, data } = props ?? {}; - - return createApprovalApiV1AgentBoardsBoardIdApprovalsPost( - boardId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type CreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type CreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationBody = - ApprovalCreate; -export type CreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationError = - HTTPValidationError; - -/** - * @summary Create Approval - */ -export const useCreateApprovalApiV1AgentBoardsBoardIdApprovalsPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: ApprovalCreate }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: ApprovalCreate }, - TContext -> => { - return useMutation( - getCreateApprovalApiV1AgentBoardsBoardIdApprovalsPostMutationOptions( - options, - ), - queryClient, - ); -}; -/** - * Apply board onboarding updates from an agent workflow. - -Used during structured objective/success-metric intake loops. - * @summary Update Onboarding - */ -export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse200 = { - data: BoardOnboardingRead; - status: 200; -}; - -export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseSuccess = - updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse200 & { - headers: Headers; - }; -export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseError = - updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse422 & { - headers: Headers; - }; - -export type updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponse = - | updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseSuccess - | updateOnboardingApiV1AgentBoardsBoardIdOnboardingPostResponseError; - -export const getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostUrl = ( - boardId: string, -) => { - return `/api/v1/agent/boards/${boardId}/onboarding`; -}; - -export const updateOnboardingApiV1AgentBoardsBoardIdOnboardingPost = async ( - boardId: string, - boardOnboardingAgentCompleteBoardOnboardingAgentQuestion: - | BoardOnboardingAgentComplete - | BoardOnboardingAgentQuestion, - options?: RequestInit, -): Promise => { - return customFetch( - getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostUrl(boardId), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify( - boardOnboardingAgentCompleteBoardOnboardingAgentQuestion, - ), - }, - ); -}; - -export const getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { - boardId: string; - data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; - }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { - boardId: string; - data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; - }, - TContext - > => { - const mutationKey = [ - "updateOnboardingApiV1AgentBoardsBoardIdOnboardingPost", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType - >, - { - boardId: string; - data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; - } - > = (props) => { - const { boardId, data } = props ?? {}; - - return updateOnboardingApiV1AgentBoardsBoardIdOnboardingPost( - boardId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type UpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type UpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationBody = - | BoardOnboardingAgentComplete - | BoardOnboardingAgentQuestion; -export type UpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationError = - HTTPValidationError; - -/** - * @summary Update Onboarding - */ -export const useUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { - boardId: string; - data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; - }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { - boardId: string; - data: BoardOnboardingAgentComplete | BoardOnboardingAgentQuestion; - }, - TContext -> => { - return useMutation( - getUpdateOnboardingApiV1AgentBoardsBoardIdOnboardingPostMutationOptions( - options, - ), - queryClient, - ); -}; -/** - * Send a direct coordination message to a specific board agent. - -Use this when a lead sees stalled, idle, or misaligned work. - * @summary Nudge an agent on a board - */ -export type agentLeadNudgeAgentResponse200 = { - data: OkResponse; - status: 200; -}; - -export type agentLeadNudgeAgentResponse403 = { - data: LLMErrorResponse; - status: 403; -}; - -export type agentLeadNudgeAgentResponse404 = { - data: LLMErrorResponse; - status: 404; -}; - -export type agentLeadNudgeAgentResponse422 = { - data: LLMErrorResponse; - status: 422; -}; - -export type agentLeadNudgeAgentResponse502 = { - data: LLMErrorResponse; - status: 502; -}; - -export type agentLeadNudgeAgentResponseSuccess = - agentLeadNudgeAgentResponse200 & { - headers: Headers; - }; -export type agentLeadNudgeAgentResponseError = ( - | agentLeadNudgeAgentResponse403 - | agentLeadNudgeAgentResponse404 - | agentLeadNudgeAgentResponse422 - | agentLeadNudgeAgentResponse502 -) & { - headers: Headers; -}; - -export type agentLeadNudgeAgentResponse = - | agentLeadNudgeAgentResponseSuccess - | agentLeadNudgeAgentResponseError; - -export const getAgentLeadNudgeAgentUrl = (boardId: string, agentId: string) => { - return `/api/v1/agent/boards/${boardId}/agents/${agentId}/nudge`; -}; - -export const agentLeadNudgeAgent = async ( - boardId: string, - agentId: string, - agentNudge: AgentNudge, - options?: RequestInit, -): Promise => { - return customFetch( - getAgentLeadNudgeAgentUrl(boardId, agentId), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(agentNudge), - }, - ); -}; - -export const getAgentLeadNudgeAgentMutationOptions = < - TError = LLMErrorResponse, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string; data: AgentNudge }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string; data: AgentNudge }, - TContext -> => { - const mutationKey = ["agentLeadNudgeAgent"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { boardId: string; agentId: string; data: AgentNudge } - > = (props) => { - const { boardId, agentId, data } = props ?? {}; - - return agentLeadNudgeAgent(boardId, agentId, data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type AgentLeadNudgeAgentMutationResult = NonNullable< - Awaited> ->; -export type AgentLeadNudgeAgentMutationBody = AgentNudge; -export type AgentLeadNudgeAgentMutationError = LLMErrorResponse; - -/** - * @summary Nudge an agent on a board - */ -export const useAgentLeadNudgeAgent = < - TError = LLMErrorResponse, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string; data: AgentNudge }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { boardId: string; agentId: string; data: AgentNudge }, - TContext -> => { - return useMutation( - getAgentLeadNudgeAgentMutationOptions(options), - queryClient, - ); -}; -/** - * Record liveness for the authenticated agent. - -Use this when the agent heartbeat loop checks in. - * @summary Upsert agent heartbeat - */ -export type agentHeartbeatApiV1AgentHeartbeatPostResponse200 = { - data: AgentRead; - status: 200; -}; - -export type agentHeartbeatApiV1AgentHeartbeatPostResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type agentHeartbeatApiV1AgentHeartbeatPostResponseSuccess = - agentHeartbeatApiV1AgentHeartbeatPostResponse200 & { - headers: Headers; - }; -export type agentHeartbeatApiV1AgentHeartbeatPostResponseError = - agentHeartbeatApiV1AgentHeartbeatPostResponse422 & { - headers: Headers; - }; - -export type agentHeartbeatApiV1AgentHeartbeatPostResponse = - | agentHeartbeatApiV1AgentHeartbeatPostResponseSuccess - | agentHeartbeatApiV1AgentHeartbeatPostResponseError; - -export const getAgentHeartbeatApiV1AgentHeartbeatPostUrl = () => { - return `/api/v1/agent/heartbeat`; -}; - -export const agentHeartbeatApiV1AgentHeartbeatPost = async ( - options?: RequestInit, -): Promise => { - return customFetch( - getAgentHeartbeatApiV1AgentHeartbeatPostUrl(), - { - ...options, - method: "POST", - }, - ); -}; - -export const getAgentHeartbeatApiV1AgentHeartbeatPostMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - void, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - void, - TContext -> => { - const mutationKey = ["agentHeartbeatApiV1AgentHeartbeatPost"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - void - > = () => { - return agentHeartbeatApiV1AgentHeartbeatPost(requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type AgentHeartbeatApiV1AgentHeartbeatPostMutationResult = NonNullable< - Awaited> ->; - -export type AgentHeartbeatApiV1AgentHeartbeatPostMutationError = - HTTPValidationError; - -/** - * @summary Upsert agent heartbeat - */ -export const useAgentHeartbeatApiV1AgentHeartbeatPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - void, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - void, - TContext -> => { - return useMutation( - getAgentHeartbeatApiV1AgentHeartbeatPostMutationOptions(options), - queryClient, - ); -}; -/** - * Fetch an agent's SOUL.md content. - -Allowed for board lead, or for an agent reading its own SOUL. - * @summary Get Agent Soul - */ -export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse200 = - { - data: string; - status: 200; - }; - -export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseSuccess = - getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse200 & { - headers: Headers; - }; -export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseError = - getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse422 & { - headers: Headers; - }; - -export type getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponse = - | getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseSuccess - | getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetResponseError; - -export const getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetUrl = ( - boardId: string, - agentId: string, -) => { - return `/api/v1/agent/boards/${boardId}/agents/${agentId}/soul`; -}; - -export const getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet = async ( - boardId: string, - agentId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetUrl( - boardId, - agentId, - ), - { - ...options, - method: "GET", - }, - ); -}; - -export const getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryKey = - (boardId: string, agentId: string) => { - return [`/api/v1/agent/boards/${boardId}/agents/${agentId}/soul`] as const; - }; - -export const getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryOptions = - < - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, - >( - boardId: string, - agentId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - ) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryKey( - boardId, - agentId, - ); - - const queryFn: QueryFunction< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - > - > = ({ signal }) => - getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet( - boardId, - agentId, - { signal, ...requestOptions }, - ); - - return { - queryKey, - queryFn, - enabled: !!(boardId && agentId), - ...queryOptions, - } as UseQueryOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - TData - > & { queryKey: DataTag }; - }; - -export type GetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type GetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryError = - HTTPValidationError; - -export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - agentId: string, - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - agentId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - agentId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary Get Agent Soul - */ - -export function useGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - agentId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType< - typeof getAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGet - > - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getGetAgentSoulApiV1AgentBoardsBoardIdAgentsAgentIdSoulGetQueryOptions( - boardId, - agentId, - options, - ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * Write SOUL.md content for a board agent and persist it for reprovisioning. - -Use this when role instructions or behavior guardrails need updates. - * @summary Update an agent's SOUL template - */ -export type agentLeadUpdateAgentSoulResponse200 = { - data: OkResponse; - status: 200; -}; - -export type agentLeadUpdateAgentSoulResponse403 = { - data: LLMErrorResponse; - status: 403; -}; - -export type agentLeadUpdateAgentSoulResponse404 = { - data: LLMErrorResponse; - status: 404; -}; - -export type agentLeadUpdateAgentSoulResponse422 = { - data: LLMErrorResponse; - status: 422; -}; - -export type agentLeadUpdateAgentSoulResponse502 = { - data: LLMErrorResponse; - status: 502; -}; - -export type agentLeadUpdateAgentSoulResponseSuccess = - agentLeadUpdateAgentSoulResponse200 & { - headers: Headers; - }; -export type agentLeadUpdateAgentSoulResponseError = ( - | agentLeadUpdateAgentSoulResponse403 - | agentLeadUpdateAgentSoulResponse404 - | agentLeadUpdateAgentSoulResponse422 - | agentLeadUpdateAgentSoulResponse502 -) & { - headers: Headers; -}; - -export type agentLeadUpdateAgentSoulResponse = - | agentLeadUpdateAgentSoulResponseSuccess - | agentLeadUpdateAgentSoulResponseError; - -export const getAgentLeadUpdateAgentSoulUrl = ( - boardId: string, - agentId: string, -) => { - return `/api/v1/agent/boards/${boardId}/agents/${agentId}/soul`; -}; - -export const agentLeadUpdateAgentSoul = async ( - boardId: string, - agentId: string, - soulUpdateRequest: SoulUpdateRequest, - options?: RequestInit, -): Promise => { - return customFetch( - getAgentLeadUpdateAgentSoulUrl(boardId, agentId), - { - ...options, - method: "PUT", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(soulUpdateRequest), - }, - ); -}; - -export const getAgentLeadUpdateAgentSoulMutationOptions = < - TError = LLMErrorResponse, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string; data: SoulUpdateRequest }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string; data: SoulUpdateRequest }, - TContext -> => { - const mutationKey = ["agentLeadUpdateAgentSoul"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { boardId: string; agentId: string; data: SoulUpdateRequest } - > = (props) => { - const { boardId, agentId, data } = props ?? {}; - - return agentLeadUpdateAgentSoul(boardId, agentId, data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type AgentLeadUpdateAgentSoulMutationResult = NonNullable< - Awaited> ->; -export type AgentLeadUpdateAgentSoulMutationBody = SoulUpdateRequest; -export type AgentLeadUpdateAgentSoulMutationError = LLMErrorResponse; - -/** - * @summary Update an agent's SOUL template - */ -export const useAgentLeadUpdateAgentSoul = < - TError = LLMErrorResponse, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string; data: SoulUpdateRequest }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { boardId: string; agentId: string; data: SoulUpdateRequest }, - TContext -> => { - return useMutation( - getAgentLeadUpdateAgentSoulMutationOptions(options), - queryClient, - ); -}; -/** - * Permanently remove a board agent and tear down associated lifecycle state. - -Use sparingly; prefer reassignment for continuity-sensitive teams. - * @summary Delete a board agent as lead - */ -export type agentLeadDeleteBoardAgentResponse200 = { - data: OkResponse; - status: 200; -}; - -export type agentLeadDeleteBoardAgentResponse403 = { - data: LLMErrorResponse; - status: 403; -}; - -export type agentLeadDeleteBoardAgentResponse404 = { - data: LLMErrorResponse; - status: 404; -}; - -export type agentLeadDeleteBoardAgentResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type agentLeadDeleteBoardAgentResponseSuccess = - agentLeadDeleteBoardAgentResponse200 & { - headers: Headers; - }; -export type agentLeadDeleteBoardAgentResponseError = ( - | agentLeadDeleteBoardAgentResponse403 - | agentLeadDeleteBoardAgentResponse404 - | agentLeadDeleteBoardAgentResponse422 -) & { - headers: Headers; -}; - -export type agentLeadDeleteBoardAgentResponse = - | agentLeadDeleteBoardAgentResponseSuccess - | agentLeadDeleteBoardAgentResponseError; - -export const getAgentLeadDeleteBoardAgentUrl = ( - boardId: string, - agentId: string, -) => { - return `/api/v1/agent/boards/${boardId}/agents/${agentId}`; -}; - -export const agentLeadDeleteBoardAgent = async ( - boardId: string, - agentId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getAgentLeadDeleteBoardAgentUrl(boardId, agentId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getAgentLeadDeleteBoardAgentMutationOptions = < - TError = LLMErrorResponse | HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string }, - TContext -> => { - const mutationKey = ["agentLeadDeleteBoardAgent"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { boardId: string; agentId: string } - > = (props) => { - const { boardId, agentId } = props ?? {}; - - return agentLeadDeleteBoardAgent(boardId, agentId, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type AgentLeadDeleteBoardAgentMutationResult = NonNullable< - Awaited> ->; - -export type AgentLeadDeleteBoardAgentMutationError = - | LLMErrorResponse - | HTTPValidationError; - -/** - * @summary Delete a board agent as lead - */ -export const useAgentLeadDeleteBoardAgent = < - TError = LLMErrorResponse | HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; agentId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { boardId: string; agentId: string }, - TContext -> => { - return useMutation( - getAgentLeadDeleteBoardAgentMutationOptions(options), - queryClient, - ); -}; -/** - * Escalate a high-impact decision or ambiguity through the gateway-main interaction channel. - -Use when lead-level context needs human confirmation or consent. - * @summary Ask the human via gateway-main - */ -export type agentLeadAskUserViaGatewayMainResponse200 = { - data: GatewayMainAskUserResponse; - status: 200; -}; - -export type agentLeadAskUserViaGatewayMainResponse403 = { - data: LLMErrorResponse; - status: 403; -}; - -export type agentLeadAskUserViaGatewayMainResponse404 = { - data: LLMErrorResponse; - status: 404; -}; - -export type agentLeadAskUserViaGatewayMainResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type agentLeadAskUserViaGatewayMainResponse502 = { - data: LLMErrorResponse; - status: 502; -}; - -export type agentLeadAskUserViaGatewayMainResponseSuccess = - agentLeadAskUserViaGatewayMainResponse200 & { - headers: Headers; - }; -export type agentLeadAskUserViaGatewayMainResponseError = ( - | agentLeadAskUserViaGatewayMainResponse403 - | agentLeadAskUserViaGatewayMainResponse404 - | agentLeadAskUserViaGatewayMainResponse422 - | agentLeadAskUserViaGatewayMainResponse502 -) & { - headers: Headers; -}; - -export type agentLeadAskUserViaGatewayMainResponse = - | agentLeadAskUserViaGatewayMainResponseSuccess - | agentLeadAskUserViaGatewayMainResponseError; - -export const getAgentLeadAskUserViaGatewayMainUrl = (boardId: string) => { - return `/api/v1/agent/boards/${boardId}/gateway/main/ask-user`; -}; - -export const agentLeadAskUserViaGatewayMain = async ( - boardId: string, - gatewayMainAskUserRequest: GatewayMainAskUserRequest, - options?: RequestInit, -): Promise => { - return customFetch( - getAgentLeadAskUserViaGatewayMainUrl(boardId), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(gatewayMainAskUserRequest), - }, - ); -}; - -export const getAgentLeadAskUserViaGatewayMainMutationOptions = < - TError = LLMErrorResponse | HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; data: GatewayMainAskUserRequest }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { boardId: string; data: GatewayMainAskUserRequest }, - TContext -> => { - const mutationKey = ["agentLeadAskUserViaGatewayMain"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { boardId: string; data: GatewayMainAskUserRequest } - > = (props) => { - const { boardId, data } = props ?? {}; - - return agentLeadAskUserViaGatewayMain(boardId, data, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type AgentLeadAskUserViaGatewayMainMutationResult = NonNullable< - Awaited> ->; -export type AgentLeadAskUserViaGatewayMainMutationBody = - GatewayMainAskUserRequest; -export type AgentLeadAskUserViaGatewayMainMutationError = - | LLMErrorResponse - | HTTPValidationError; - -/** - * @summary Ask the human via gateway-main - */ -export const useAgentLeadAskUserViaGatewayMain = < - TError = LLMErrorResponse | HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; data: GatewayMainAskUserRequest }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { boardId: string; data: GatewayMainAskUserRequest }, - TContext -> => { - return useMutation( - getAgentLeadAskUserViaGatewayMainMutationOptions(options), - queryClient, - ); -}; /** * Route a direct lead handoff or question from an agent to the board lead. @@ -4617,3 +4315,305 @@ export const useAgentMainBroadcastLeadMessage = < queryClient, ); }; +/** + * Token-authenticated liveness probe for agent API clients. + +Use this endpoint when the caller needs to verify both service availability and agent-token validity in one request. + * @summary Agent Auth Health Check + */ +export type agentHealthzApiV1AgentHealthzGetResponse200 = { + data: AgentHealthStatusResponse; + status: 200; +}; + +export type agentHealthzApiV1AgentHealthzGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type agentHealthzApiV1AgentHealthzGetResponseSuccess = + agentHealthzApiV1AgentHealthzGetResponse200 & { + headers: Headers; + }; +export type agentHealthzApiV1AgentHealthzGetResponseError = + agentHealthzApiV1AgentHealthzGetResponse422 & { + headers: Headers; + }; + +export type agentHealthzApiV1AgentHealthzGetResponse = + | agentHealthzApiV1AgentHealthzGetResponseSuccess + | agentHealthzApiV1AgentHealthzGetResponseError; + +export const getAgentHealthzApiV1AgentHealthzGetUrl = () => { + return `/api/v1/agent/healthz`; +}; + +export const agentHealthzApiV1AgentHealthzGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getAgentHealthzApiV1AgentHealthzGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +export const getAgentHealthzApiV1AgentHealthzGetQueryKey = () => { + return [`/api/v1/agent/healthz`] as const; +}; + +export const getAgentHealthzApiV1AgentHealthzGetQueryOptions = < + TData = Awaited>, + TError = HTTPValidationError, +>(options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; +}) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? getAgentHealthzApiV1AgentHealthzGetQueryKey(); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + agentHealthzApiV1AgentHealthzGet({ signal, ...requestOptions }); + + return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type AgentHealthzApiV1AgentHealthzGetQueryResult = NonNullable< + Awaited> +>; +export type AgentHealthzApiV1AgentHealthzGetQueryError = HTTPValidationError; + +export function useAgentHealthzApiV1AgentHealthzGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + options: { + query: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useAgentHealthzApiV1AgentHealthzGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useAgentHealthzApiV1AgentHealthzGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary Agent Auth Health Check + */ + +export function useAgentHealthzApiV1AgentHealthzGet< + TData = Awaited>, + TError = HTTPValidationError, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = getAgentHealthzApiV1AgentHealthzGetQueryOptions(options); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Record liveness for the authenticated agent. + +Use this when the agent heartbeat loop checks in. + * @summary Upsert agent heartbeat + */ +export type agentHeartbeatApiV1AgentHeartbeatPostResponse200 = { + data: AgentRead; + status: 200; +}; + +export type agentHeartbeatApiV1AgentHeartbeatPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type agentHeartbeatApiV1AgentHeartbeatPostResponseSuccess = + agentHeartbeatApiV1AgentHeartbeatPostResponse200 & { + headers: Headers; + }; +export type agentHeartbeatApiV1AgentHeartbeatPostResponseError = + agentHeartbeatApiV1AgentHeartbeatPostResponse422 & { + headers: Headers; + }; + +export type agentHeartbeatApiV1AgentHeartbeatPostResponse = + | agentHeartbeatApiV1AgentHeartbeatPostResponseSuccess + | agentHeartbeatApiV1AgentHeartbeatPostResponseError; + +export const getAgentHeartbeatApiV1AgentHeartbeatPostUrl = () => { + return `/api/v1/agent/heartbeat`; +}; + +export const agentHeartbeatApiV1AgentHeartbeatPost = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getAgentHeartbeatApiV1AgentHeartbeatPostUrl(), + { + ...options, + method: "POST", + }, + ); +}; + +export const getAgentHeartbeatApiV1AgentHeartbeatPostMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + void, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + void, + TContext +> => { + const mutationKey = ["agentHeartbeatApiV1AgentHeartbeatPost"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + void + > = () => { + return agentHeartbeatApiV1AgentHeartbeatPost(requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type AgentHeartbeatApiV1AgentHeartbeatPostMutationResult = NonNullable< + Awaited> +>; + +export type AgentHeartbeatApiV1AgentHeartbeatPostMutationError = + HTTPValidationError; + +/** + * @summary Upsert agent heartbeat + */ +export const useAgentHeartbeatApiV1AgentHeartbeatPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + void, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + void, + TContext +> => { + return useMutation( + getAgentHeartbeatApiV1AgentHeartbeatPostMutationOptions(options), + queryClient, + ); +}; diff --git a/frontend/src/api/generated/agents/agents.ts b/frontend/src/api/generated/agents/agents.ts index ede3ec2f..81822c55 100644 --- a/frontend/src/api/generated/agents/agents.ts +++ b/frontend/src/api/generated/agents/agents.ts @@ -364,6 +364,134 @@ export const useCreateAgentApiV1AgentsPost = < queryClient, ); }; +/** + * Heartbeat an existing agent or create/provision one if needed. + * @summary Heartbeat Or Create Agent + */ +export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse200 = { + data: AgentRead; + status: 200; +}; + +export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseSuccess = + heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse200 & { + headers: Headers; + }; +export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseError = + heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse422 & { + headers: Headers; + }; + +export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse = + | heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseSuccess + | heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseError; + +export const getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostUrl = () => { + return `/api/v1/agents/heartbeat`; +}; + +export const heartbeatOrCreateAgentApiV1AgentsHeartbeatPost = async ( + agentHeartbeatCreate: AgentHeartbeatCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(agentHeartbeatCreate), + }, + ); +}; + +export const getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { data: AgentHeartbeatCreate }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited>, + TError, + { data: AgentHeartbeatCreate }, + TContext + > => { + const mutationKey = ["heartbeatOrCreateAgentApiV1AgentsHeartbeatPost"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType + >, + { data: AgentHeartbeatCreate } + > = (props) => { + const { data } = props ?? {}; + + return heartbeatOrCreateAgentApiV1AgentsHeartbeatPost( + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type HeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationResult = + NonNullable< + Awaited> + >; +export type HeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationBody = + AgentHeartbeatCreate; +export type HeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationError = + HTTPValidationError; + +/** + * @summary Heartbeat Or Create Agent + */ +export const useHeartbeatOrCreateAgentApiV1AgentsHeartbeatPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { data: AgentHeartbeatCreate }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { data: AgentHeartbeatCreate }, + TContext +> => { + return useMutation( + getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationOptions(options), + queryClient, + ); +}; /** * Stream agent updates as SSE events. * @summary Stream Agents @@ -576,6 +704,123 @@ export function useStreamAgentsApiV1AgentsStreamGet< return { ...query, queryKey: queryOptions.queryKey }; } +/** + * Delete an agent and clean related task state. + * @summary Delete Agent + */ +export type deleteAgentApiV1AgentsAgentIdDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteAgentApiV1AgentsAgentIdDeleteResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type deleteAgentApiV1AgentsAgentIdDeleteResponseSuccess = + deleteAgentApiV1AgentsAgentIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteAgentApiV1AgentsAgentIdDeleteResponseError = + deleteAgentApiV1AgentsAgentIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteAgentApiV1AgentsAgentIdDeleteResponse = + | deleteAgentApiV1AgentsAgentIdDeleteResponseSuccess + | deleteAgentApiV1AgentsAgentIdDeleteResponseError; + +export const getDeleteAgentApiV1AgentsAgentIdDeleteUrl = (agentId: string) => { + return `/api/v1/agents/${agentId}`; +}; + +export const deleteAgentApiV1AgentsAgentIdDelete = async ( + agentId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteAgentApiV1AgentsAgentIdDeleteUrl(agentId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteAgentApiV1AgentsAgentIdDeleteMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { agentId: string }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { agentId: string }, + TContext +> => { + const mutationKey = ["deleteAgentApiV1AgentsAgentIdDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { agentId: string } + > = (props) => { + const { agentId } = props ?? {}; + + return deleteAgentApiV1AgentsAgentIdDelete(agentId, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type DeleteAgentApiV1AgentsAgentIdDeleteMutationResult = NonNullable< + Awaited> +>; + +export type DeleteAgentApiV1AgentsAgentIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Delete Agent + */ +export const useDeleteAgentApiV1AgentsAgentIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { agentId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { agentId: string }, + TContext +> => { + return useMutation( + getDeleteAgentApiV1AgentsAgentIdDeleteMutationOptions(options), + queryClient, + ); +}; /** * Get a single agent by id. * @summary Get Agent @@ -937,123 +1182,6 @@ export const useUpdateAgentApiV1AgentsAgentIdPatch = < queryClient, ); }; -/** - * Delete an agent and clean related task state. - * @summary Delete Agent - */ -export type deleteAgentApiV1AgentsAgentIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteAgentApiV1AgentsAgentIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type deleteAgentApiV1AgentsAgentIdDeleteResponseSuccess = - deleteAgentApiV1AgentsAgentIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteAgentApiV1AgentsAgentIdDeleteResponseError = - deleteAgentApiV1AgentsAgentIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteAgentApiV1AgentsAgentIdDeleteResponse = - | deleteAgentApiV1AgentsAgentIdDeleteResponseSuccess - | deleteAgentApiV1AgentsAgentIdDeleteResponseError; - -export const getDeleteAgentApiV1AgentsAgentIdDeleteUrl = (agentId: string) => { - return `/api/v1/agents/${agentId}`; -}; - -export const deleteAgentApiV1AgentsAgentIdDelete = async ( - agentId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteAgentApiV1AgentsAgentIdDeleteUrl(agentId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteAgentApiV1AgentsAgentIdDeleteMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { agentId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { agentId: string }, - TContext -> => { - const mutationKey = ["deleteAgentApiV1AgentsAgentIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { agentId: string } - > = (props) => { - const { agentId } = props ?? {}; - - return deleteAgentApiV1AgentsAgentIdDelete(agentId, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type DeleteAgentApiV1AgentsAgentIdDeleteMutationResult = NonNullable< - Awaited> ->; - -export type DeleteAgentApiV1AgentsAgentIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete Agent - */ -export const useDeleteAgentApiV1AgentsAgentIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { agentId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { agentId: string }, - TContext -> => { - return useMutation( - getDeleteAgentApiV1AgentsAgentIdDeleteMutationOptions(options), - queryClient, - ); -}; /** * Record a heartbeat for a specific agent. * @summary Heartbeat Agent @@ -1182,131 +1310,3 @@ export const useHeartbeatAgentApiV1AgentsAgentIdHeartbeatPost = < queryClient, ); }; -/** - * Heartbeat an existing agent or create/provision one if needed. - * @summary Heartbeat Or Create Agent - */ -export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse200 = { - data: AgentRead; - status: 200; -}; - -export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseSuccess = - heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse200 & { - headers: Headers; - }; -export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseError = - heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse422 & { - headers: Headers; - }; - -export type heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponse = - | heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseSuccess - | heartbeatOrCreateAgentApiV1AgentsHeartbeatPostResponseError; - -export const getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostUrl = () => { - return `/api/v1/agents/heartbeat`; -}; - -export const heartbeatOrCreateAgentApiV1AgentsHeartbeatPost = async ( - agentHeartbeatCreate: AgentHeartbeatCreate, - options?: RequestInit, -): Promise => { - return customFetch( - getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostUrl(), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(agentHeartbeatCreate), - }, - ); -}; - -export const getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { data: AgentHeartbeatCreate }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited>, - TError, - { data: AgentHeartbeatCreate }, - TContext - > => { - const mutationKey = ["heartbeatOrCreateAgentApiV1AgentsHeartbeatPost"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType - >, - { data: AgentHeartbeatCreate } - > = (props) => { - const { data } = props ?? {}; - - return heartbeatOrCreateAgentApiV1AgentsHeartbeatPost( - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type HeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationResult = - NonNullable< - Awaited> - >; -export type HeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationBody = - AgentHeartbeatCreate; -export type HeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationError = - HTTPValidationError; - -/** - * @summary Heartbeat Or Create Agent - */ -export const useHeartbeatOrCreateAgentApiV1AgentsHeartbeatPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { data: AgentHeartbeatCreate }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { data: AgentHeartbeatCreate }, - TContext -> => { - return useMutation( - getHeartbeatOrCreateAgentApiV1AgentsHeartbeatPostMutationOptions(options), - queryClient, - ); -}; diff --git a/frontend/src/api/generated/board-groups/board-groups.ts b/frontend/src/api/generated/board-groups/board-groups.ts index 78fbaf2f..ceb6c86c 100644 --- a/frontend/src/api/generated/board-groups/board-groups.ts +++ b/frontend/src/api/generated/board-groups/board-groups.ts @@ -369,6 +369,129 @@ export const useCreateBoardGroupApiV1BoardGroupsPost = < queryClient, ); }; +/** + * Delete a board group. + * @summary Delete Board Group + */ +export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseSuccess = + deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseError = + deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse = + | deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseSuccess + | deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseError; + +export const getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteUrl = ( + groupId: string, +) => { + return `/api/v1/board-groups/${groupId}`; +}; + +export const deleteBoardGroupApiV1BoardGroupsGroupIdDelete = async ( + groupId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteUrl(groupId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { groupId: string }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { groupId: string }, + TContext +> => { + const mutationKey = ["deleteBoardGroupApiV1BoardGroupsGroupIdDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { groupId: string } + > = (props) => { + const { groupId } = props ?? {}; + + return deleteBoardGroupApiV1BoardGroupsGroupIdDelete( + groupId, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type DeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationResult = + NonNullable< + Awaited> + >; + +export type DeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Delete Board Group + */ +export const useDeleteBoardGroupApiV1BoardGroupsGroupIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { groupId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { groupId: string }, + TContext +> => { + return useMutation( + getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationOptions(options), + queryClient, + ); +}; /** * Get a board group by id. * @summary Get Board Group @@ -707,125 +830,161 @@ export const useUpdateBoardGroupApiV1BoardGroupsGroupIdPatch = < ); }; /** - * Delete a board group. - * @summary Delete Board Group + * Apply heartbeat settings to agents in a board group. + * @summary Apply Board Group Heartbeat */ -export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; +export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse200 = + { + data: BoardGroupHeartbeatApplyResult; + status: 200; + }; -export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; +export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse422 = + { + data: HTTPValidationError; + status: 422; + }; -export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseSuccess = - deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse200 & { +export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseSuccess = + applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse200 & { headers: Headers; }; -export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseError = - deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse422 & { +export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseError = + applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse422 & { headers: Headers; }; -export type deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponse = - | deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseSuccess - | deleteBoardGroupApiV1BoardGroupsGroupIdDeleteResponseError; +export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse = -export const getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteUrl = ( - groupId: string, -) => { - return `/api/v1/board-groups/${groupId}`; -}; + | applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseSuccess + | applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseError; -export const deleteBoardGroupApiV1BoardGroupsGroupIdDelete = async ( - groupId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteUrl(groupId), - { - ...options, - method: "DELETE", - }, - ); -}; +export const getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostUrl = + (groupId: string) => { + return `/api/v1/board-groups/${groupId}/heartbeat`; + }; -export const getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { groupId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { groupId: string }, - TContext -> => { - const mutationKey = ["deleteBoardGroupApiV1BoardGroupsGroupIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { groupId: string } - > = (props) => { - const { groupId } = props ?? {}; - - return deleteBoardGroupApiV1BoardGroupsGroupIdDelete( - groupId, - requestOptions, +export const applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost = + async ( + groupId: string, + boardGroupHeartbeatApply: BoardGroupHeartbeatApply, + options?: RequestInit, + ): Promise => { + return customFetch( + getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostUrl( + groupId, + ), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(boardGroupHeartbeatApply), + }, ); }; - return { mutationFn, ...mutationOptions }; -}; +export const getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost + > + >, + TError, + { groupId: string; data: BoardGroupHeartbeatApply }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType< + typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost + > + >, + TError, + { groupId: string; data: BoardGroupHeartbeatApply }, + TContext + > => { + const mutationKey = [ + "applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; -export type DeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationResult = + const mutationFn: MutationFunction< + Awaited< + ReturnType< + typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost + > + >, + { groupId: string; data: BoardGroupHeartbeatApply } + > = (props) => { + const { groupId, data } = props ?? {}; + + return applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost( + groupId, + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type ApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationResult = NonNullable< - Awaited> + Awaited< + ReturnType< + typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost + > + > >; - -export type DeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationError = +export type ApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationBody = + BoardGroupHeartbeatApply; +export type ApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationError = HTTPValidationError; /** - * @summary Delete Board Group + * @summary Apply Board Group Heartbeat */ -export const useDeleteBoardGroupApiV1BoardGroupsGroupIdDelete = < +export const useApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost = < TError = HTTPValidationError, TContext = unknown, >( options?: { mutation?: UseMutationOptions< - Awaited>, + Awaited< + ReturnType< + typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost + > + >, TError, - { groupId: string }, + { groupId: string; data: BoardGroupHeartbeatApply }, TContext >; request?: SecondParameter; }, queryClient?: QueryClient, ): UseMutationResult< - Awaited>, + Awaited< + ReturnType< + typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost + > + >, TError, - { groupId: string }, + { groupId: string; data: BoardGroupHeartbeatApply }, TContext > => { return useMutation( - getDeleteBoardGroupApiV1BoardGroupsGroupIdDeleteMutationOptions(options), + getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationOptions( + options, + ), queryClient, ); }; @@ -1131,163 +1290,3 @@ export function useGetBoardGroupSnapshotApiV1BoardGroupsGroupIdSnapshotGet< return { ...query, queryKey: queryOptions.queryKey }; } - -/** - * Apply heartbeat settings to agents in a board group. - * @summary Apply Board Group Heartbeat - */ -export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse200 = - { - data: BoardGroupHeartbeatApplyResult; - status: 200; - }; - -export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseSuccess = - applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse200 & { - headers: Headers; - }; -export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseError = - applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse422 & { - headers: Headers; - }; - -export type applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponse = - - | applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseSuccess - | applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostResponseError; - -export const getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostUrl = - (groupId: string) => { - return `/api/v1/board-groups/${groupId}/heartbeat`; - }; - -export const applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost = - async ( - groupId: string, - boardGroupHeartbeatApply: BoardGroupHeartbeatApply, - options?: RequestInit, - ): Promise => { - return customFetch( - getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostUrl( - groupId, - ), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(boardGroupHeartbeatApply), - }, - ); - }; - -export const getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost - > - >, - TError, - { groupId: string; data: BoardGroupHeartbeatApply }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType< - typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost - > - >, - TError, - { groupId: string; data: BoardGroupHeartbeatApply }, - TContext - > => { - const mutationKey = [ - "applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType< - typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost - > - >, - { groupId: string; data: BoardGroupHeartbeatApply } - > = (props) => { - const { groupId, data } = props ?? {}; - - return applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost( - groupId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type ApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationResult = - NonNullable< - Awaited< - ReturnType< - typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost - > - > - >; -export type ApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationBody = - BoardGroupHeartbeatApply; -export type ApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationError = - HTTPValidationError; - -/** - * @summary Apply Board Group Heartbeat - */ -export const useApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost - > - >, - TError, - { groupId: string; data: BoardGroupHeartbeatApply }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType< - typeof applyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPost - > - >, - TError, - { groupId: string; data: BoardGroupHeartbeatApply }, - TContext -> => { - return useMutation( - getApplyBoardGroupHeartbeatApiV1BoardGroupsGroupIdHeartbeatPostMutationOptions( - options, - ), - queryClient, - ); -}; diff --git a/frontend/src/api/generated/board-onboarding/board-onboarding.ts b/frontend/src/api/generated/board-onboarding/board-onboarding.ts index 8efcb6ff..479bfd9a 100644 --- a/frontend/src/api/generated/board-onboarding/board-onboarding.ts +++ b/frontend/src/api/generated/board-onboarding/board-onboarding.ts @@ -274,298 +274,6 @@ export function useGetOnboardingApiV1BoardsBoardIdOnboardingGet< return { ...query, queryKey: queryOptions.queryKey }; } -/** - * Start onboarding and send instructions to the gateway agent. - * @summary Start Onboarding - */ -export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse200 = { - data: BoardOnboardingRead; - status: 200; -}; - -export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseSuccess = - startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse200 & { - headers: Headers; - }; -export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseError = - startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse422 & { - headers: Headers; - }; - -export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse = - | startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseSuccess - | startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseError; - -export const getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostUrl = ( - boardId: string, -) => { - return `/api/v1/boards/${boardId}/onboarding/start`; -}; - -export const startOnboardingApiV1BoardsBoardIdOnboardingStartPost = async ( - boardId: string, - boardOnboardingStart: BoardOnboardingStart, - options?: RequestInit, -): Promise => { - return customFetch( - getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostUrl(boardId), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(boardOnboardingStart), - }, - ); -}; - -export const getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardOnboardingStart }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardOnboardingStart }, - TContext - > => { - const mutationKey = [ - "startOnboardingApiV1BoardsBoardIdOnboardingStartPost", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType - >, - { boardId: string; data: BoardOnboardingStart } - > = (props) => { - const { boardId, data } = props ?? {}; - - return startOnboardingApiV1BoardsBoardIdOnboardingStartPost( - boardId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type StartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type StartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationBody = - BoardOnboardingStart; -export type StartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationError = - HTTPValidationError; - -/** - * @summary Start Onboarding - */ -export const useStartOnboardingApiV1BoardsBoardIdOnboardingStartPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardOnboardingStart }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardOnboardingStart }, - TContext -> => { - return useMutation( - getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationOptions( - options, - ), - queryClient, - ); -}; -/** - * Send a user onboarding answer to the gateway agent. - * @summary Answer Onboarding - */ -export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse200 = - { - data: BoardOnboardingRead; - status: 200; - }; - -export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseSuccess = - answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse200 & { - headers: Headers; - }; -export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseError = - answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse422 & { - headers: Headers; - }; - -export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse = - | answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseSuccess - | answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseError; - -export const getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostUrl = ( - boardId: string, -) => { - return `/api/v1/boards/${boardId}/onboarding/answer`; -}; - -export const answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost = async ( - boardId: string, - boardOnboardingAnswer: BoardOnboardingAnswer, - options?: RequestInit, -): Promise => { - return customFetch( - getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostUrl(boardId), - { - ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(boardOnboardingAnswer), - }, - ); -}; - -export const getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost - > - >, - TError, - { boardId: string; data: BoardOnboardingAnswer }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardOnboardingAnswer }, - TContext - > => { - const mutationKey = [ - "answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType< - typeof answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost - > - >, - { boardId: string; data: BoardOnboardingAnswer } - > = (props) => { - const { boardId, data } = props ?? {}; - - return answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost( - boardId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type AnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type AnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationBody = - BoardOnboardingAnswer; -export type AnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationError = - HTTPValidationError; - -/** - * @summary Answer Onboarding - */ -export const useAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost - > - >, - TError, - { boardId: string; data: BoardOnboardingAnswer }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { boardId: string; data: BoardOnboardingAnswer }, - TContext -> => { - return useMutation( - getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationOptions( - options, - ), - queryClient, - ); -}; /** * Store onboarding updates submitted by the gateway agent. * @summary Agent Onboarding Update @@ -741,6 +449,156 @@ export const useAgentOnboardingUpdateApiV1BoardsBoardIdOnboardingAgentPost = < queryClient, ); }; +/** + * Send a user onboarding answer to the gateway agent. + * @summary Answer Onboarding + */ +export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse200 = + { + data: BoardOnboardingRead; + status: 200; + }; + +export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse422 = + { + data: HTTPValidationError; + status: 422; + }; + +export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseSuccess = + answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse200 & { + headers: Headers; + }; +export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseError = + answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse422 & { + headers: Headers; + }; + +export type answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponse = + | answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseSuccess + | answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostResponseError; + +export const getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostUrl = ( + boardId: string, +) => { + return `/api/v1/boards/${boardId}/onboarding/answer`; +}; + +export const answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost = async ( + boardId: string, + boardOnboardingAnswer: BoardOnboardingAnswer, + options?: RequestInit, +): Promise => { + return customFetch( + getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostUrl(boardId), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(boardOnboardingAnswer), + }, + ); +}; + +export const getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost + > + >, + TError, + { boardId: string; data: BoardOnboardingAnswer }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardOnboardingAnswer }, + TContext + > => { + const mutationKey = [ + "answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType< + typeof answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost + > + >, + { boardId: string; data: BoardOnboardingAnswer } + > = (props) => { + const { boardId, data } = props ?? {}; + + return answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost( + boardId, + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type AnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type AnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationBody = + BoardOnboardingAnswer; +export type AnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationError = + HTTPValidationError; + +/** + * @summary Answer Onboarding + */ +export const useAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof answerOnboardingApiV1BoardsBoardIdOnboardingAnswerPost + > + >, + TError, + { boardId: string; data: BoardOnboardingAnswer }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardOnboardingAnswer }, + TContext +> => { + return useMutation( + getAnswerOnboardingApiV1BoardsBoardIdOnboardingAnswerPostMutationOptions( + options, + ), + queryClient, + ); +}; /** * Confirm onboarding results and provision the board lead agent. * @summary Confirm Onboarding @@ -895,3 +753,145 @@ export const useConfirmOnboardingApiV1BoardsBoardIdOnboardingConfirmPost = < queryClient, ); }; +/** + * Start onboarding and send instructions to the gateway agent. + * @summary Start Onboarding + */ +export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse200 = { + data: BoardOnboardingRead; + status: 200; +}; + +export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseSuccess = + startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse200 & { + headers: Headers; + }; +export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseError = + startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse422 & { + headers: Headers; + }; + +export type startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponse = + | startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseSuccess + | startOnboardingApiV1BoardsBoardIdOnboardingStartPostResponseError; + +export const getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostUrl = ( + boardId: string, +) => { + return `/api/v1/boards/${boardId}/onboarding/start`; +}; + +export const startOnboardingApiV1BoardsBoardIdOnboardingStartPost = async ( + boardId: string, + boardOnboardingStart: BoardOnboardingStart, + options?: RequestInit, +): Promise => { + return customFetch( + getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostUrl(boardId), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(boardOnboardingStart), + }, + ); +}; + +export const getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardOnboardingStart }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardOnboardingStart }, + TContext + > => { + const mutationKey = [ + "startOnboardingApiV1BoardsBoardIdOnboardingStartPost", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType + >, + { boardId: string; data: BoardOnboardingStart } + > = (props) => { + const { boardId, data } = props ?? {}; + + return startOnboardingApiV1BoardsBoardIdOnboardingStartPost( + boardId, + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type StartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type StartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationBody = + BoardOnboardingStart; +export type StartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationError = + HTTPValidationError; + +/** + * @summary Start Onboarding + */ +export const useStartOnboardingApiV1BoardsBoardIdOnboardingStartPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardOnboardingStart }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { boardId: string; data: BoardOnboardingStart }, + TContext +> => { + return useMutation( + getStartOnboardingApiV1BoardsBoardIdOnboardingStartPostMutationOptions( + options, + ), + queryClient, + ); +}; diff --git a/frontend/src/api/generated/board-webhooks/board-webhooks.ts b/frontend/src/api/generated/board-webhooks/board-webhooks.ts index 5cdeb22d..3170f958 100644 --- a/frontend/src/api/generated/board-webhooks/board-webhooks.ts +++ b/frontend/src/api/generated/board-webhooks/board-webhooks.ts @@ -435,6 +435,163 @@ export const useCreateBoardWebhookApiV1BoardsBoardIdWebhooksPost = < queryClient, ); }; +/** + * Delete a webhook and its stored payload rows. + * @summary Delete Board Webhook + */ +export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse200 = + { + data: OkResponse; + status: 200; + }; + +export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse422 = + { + data: HTTPValidationError; + status: 422; + }; + +export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseSuccess = + deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseError = + deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse = + + | deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseSuccess + | deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseError; + +export const getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteUrl = + (boardId: string, webhookId: string) => { + return `/api/v1/boards/${boardId}/webhooks/${webhookId}`; + }; + +export const deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete = + async ( + boardId: string, + webhookId: string, + options?: RequestInit, + ): Promise => { + return customFetch( + getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteUrl( + boardId, + webhookId, + ), + { + ...options, + method: "DELETE", + }, + ); + }; + +export const getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete + > + >, + TError, + { boardId: string; webhookId: string }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType< + typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete + > + >, + TError, + { boardId: string; webhookId: string }, + TContext + > => { + const mutationKey = [ + "deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType< + typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete + > + >, + { boardId: string; webhookId: string } + > = (props) => { + const { boardId, webhookId } = props ?? {}; + + return deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete( + boardId, + webhookId, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type DeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationResult = + NonNullable< + Awaited< + ReturnType< + typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete + > + > + >; + +export type DeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Delete Board Webhook + */ +export const useDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete + > + >, + TError, + { boardId: string; webhookId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType< + typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete + > + >, + TError, + { boardId: string; webhookId: string }, + TContext +> => { + return useMutation( + getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationOptions( + options, + ), + queryClient, + ); +}; /** * Get one board webhook configuration. * @summary Get Board Webhook @@ -874,163 +1031,6 @@ export const useUpdateBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdPatch = < queryClient, ); }; -/** - * Delete a webhook and its stored payload rows. - * @summary Delete Board Webhook - */ -export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse200 = - { - data: OkResponse; - status: 200; - }; - -export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseSuccess = - deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseError = - deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponse = - - | deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseSuccess - | deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteResponseError; - -export const getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteUrl = - (boardId: string, webhookId: string) => { - return `/api/v1/boards/${boardId}/webhooks/${webhookId}`; - }; - -export const deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete = - async ( - boardId: string, - webhookId: string, - options?: RequestInit, - ): Promise => { - return customFetch( - getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteUrl( - boardId, - webhookId, - ), - { - ...options, - method: "DELETE", - }, - ); - }; - -export const getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete - > - >, - TError, - { boardId: string; webhookId: string }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType< - typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete - > - >, - TError, - { boardId: string; webhookId: string }, - TContext - > => { - const mutationKey = [ - "deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType< - typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete - > - >, - { boardId: string; webhookId: string } - > = (props) => { - const { boardId, webhookId } = props ?? {}; - - return deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete( - boardId, - webhookId, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type DeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationResult = - NonNullable< - Awaited< - ReturnType< - typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete - > - > - >; - -export type DeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete Board Webhook - */ -export const useDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete - > - >, - TError, - { boardId: string; webhookId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType< - typeof deleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDelete - > - >, - TError, - { boardId: string; webhookId: string }, - TContext -> => { - return useMutation( - getDeleteBoardWebhookApiV1BoardsBoardIdWebhooksWebhookIdDeleteMutationOptions( - options, - ), - queryClient, - ); -}; /** * Open inbound webhook endpoint that stores payloads and nudges the board lead. * @summary Ingest Board Webhook diff --git a/frontend/src/api/generated/boards/boards.ts b/frontend/src/api/generated/boards/boards.ts index e5919845..920d51d3 100644 --- a/frontend/src/api/generated/boards/boards.ts +++ b/frontend/src/api/generated/boards/boards.ts @@ -363,6 +363,123 @@ export const useCreateBoardApiV1BoardsPost = < queryClient, ); }; +/** + * Delete a board and all dependent records. + * @summary Delete Board + */ +export type deleteBoardApiV1BoardsBoardIdDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteBoardApiV1BoardsBoardIdDeleteResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type deleteBoardApiV1BoardsBoardIdDeleteResponseSuccess = + deleteBoardApiV1BoardsBoardIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteBoardApiV1BoardsBoardIdDeleteResponseError = + deleteBoardApiV1BoardsBoardIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteBoardApiV1BoardsBoardIdDeleteResponse = + | deleteBoardApiV1BoardsBoardIdDeleteResponseSuccess + | deleteBoardApiV1BoardsBoardIdDeleteResponseError; + +export const getDeleteBoardApiV1BoardsBoardIdDeleteUrl = (boardId: string) => { + return `/api/v1/boards/${boardId}`; +}; + +export const deleteBoardApiV1BoardsBoardIdDelete = async ( + boardId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteBoardApiV1BoardsBoardIdDeleteUrl(boardId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteBoardApiV1BoardsBoardIdDeleteMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { boardId: string }, + TContext +> => { + const mutationKey = ["deleteBoardApiV1BoardsBoardIdDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { boardId: string } + > = (props) => { + const { boardId } = props ?? {}; + + return deleteBoardApiV1BoardsBoardIdDelete(boardId, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type DeleteBoardApiV1BoardsBoardIdDeleteMutationResult = NonNullable< + Awaited> +>; + +export type DeleteBoardApiV1BoardsBoardIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Delete Board + */ +export const useDeleteBoardApiV1BoardsBoardIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { boardId: string }, + TContext +> => { + return useMutation( + getDeleteBoardApiV1BoardsBoardIdDeleteMutationOptions(options), + queryClient, + ); +}; /** * Get a board by id. * @summary Get Board @@ -683,362 +800,6 @@ export const useUpdateBoardApiV1BoardsBoardIdPatch = < queryClient, ); }; -/** - * Delete a board and all dependent records. - * @summary Delete Board - */ -export type deleteBoardApiV1BoardsBoardIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteBoardApiV1BoardsBoardIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type deleteBoardApiV1BoardsBoardIdDeleteResponseSuccess = - deleteBoardApiV1BoardsBoardIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteBoardApiV1BoardsBoardIdDeleteResponseError = - deleteBoardApiV1BoardsBoardIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteBoardApiV1BoardsBoardIdDeleteResponse = - | deleteBoardApiV1BoardsBoardIdDeleteResponseSuccess - | deleteBoardApiV1BoardsBoardIdDeleteResponseError; - -export const getDeleteBoardApiV1BoardsBoardIdDeleteUrl = (boardId: string) => { - return `/api/v1/boards/${boardId}`; -}; - -export const deleteBoardApiV1BoardsBoardIdDelete = async ( - boardId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteBoardApiV1BoardsBoardIdDeleteUrl(boardId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteBoardApiV1BoardsBoardIdDeleteMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { boardId: string }, - TContext -> => { - const mutationKey = ["deleteBoardApiV1BoardsBoardIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { boardId: string } - > = (props) => { - const { boardId } = props ?? {}; - - return deleteBoardApiV1BoardsBoardIdDelete(boardId, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type DeleteBoardApiV1BoardsBoardIdDeleteMutationResult = NonNullable< - Awaited> ->; - -export type DeleteBoardApiV1BoardsBoardIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete Board - */ -export const useDeleteBoardApiV1BoardsBoardIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { boardId: string }, - TContext -> => { - return useMutation( - getDeleteBoardApiV1BoardsBoardIdDeleteMutationOptions(options), - queryClient, - ); -}; -/** - * Get a board snapshot view model. - * @summary Get Board Snapshot - */ -export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse200 = { - data: BoardSnapshot; - status: 200; -}; - -export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseSuccess = - getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse200 & { - headers: Headers; - }; -export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseError = - getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse422 & { - headers: Headers; - }; - -export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse = - | getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseSuccess - | getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseError; - -export const getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetUrl = ( - boardId: string, -) => { - return `/api/v1/boards/${boardId}/snapshot`; -}; - -export const getBoardSnapshotApiV1BoardsBoardIdSnapshotGet = async ( - boardId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetUrl(boardId), - { - ...options, - method: "GET", - }, - ); -}; - -export const getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryKey = ( - boardId: string, -) => { - return [`/api/v1/boards/${boardId}/snapshot`] as const; -}; - -export const getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryOptions = < - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryKey(boardId); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - getBoardSnapshotApiV1BoardsBoardIdSnapshotGet(boardId, { - signal, - ...requestOptions, - }); - - return { - queryKey, - queryFn, - enabled: !!boardId, - ...queryOptions, - } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type GetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryResult = - NonNullable< - Awaited> - >; -export type GetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryError = - HTTPValidationError; - -export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary Get Board Snapshot - */ - -export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryOptions( - boardId, - options, - ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - /** * Get a grouped snapshot across related boards. @@ -1343,3 +1104,242 @@ export function useGetBoardGroupSnapshotApiV1BoardsBoardIdGroupSnapshotGet< return { ...query, queryKey: queryOptions.queryKey }; } + +/** + * Get a board snapshot view model. + * @summary Get Board Snapshot + */ +export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse200 = { + data: BoardSnapshot; + status: 200; +}; + +export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseSuccess = + getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse200 & { + headers: Headers; + }; +export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseError = + getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse422 & { + headers: Headers; + }; + +export type getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponse = + | getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseSuccess + | getBoardSnapshotApiV1BoardsBoardIdSnapshotGetResponseError; + +export const getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetUrl = ( + boardId: string, +) => { + return `/api/v1/boards/${boardId}/snapshot`; +}; + +export const getBoardSnapshotApiV1BoardsBoardIdSnapshotGet = async ( + boardId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetUrl(boardId), + { + ...options, + method: "GET", + }, + ); +}; + +export const getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryKey = ( + boardId: string, +) => { + return [`/api/v1/boards/${boardId}/snapshot`] as const; +}; + +export const getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryOptions = < + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, +) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryKey(boardId); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + getBoardSnapshotApiV1BoardsBoardIdSnapshotGet(boardId, { + signal, + ...requestOptions, + }); + + return { + queryKey, + queryFn, + enabled: !!boardId, + ...queryOptions, + } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type GetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryResult = + NonNullable< + Awaited> + >; +export type GetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryError = + HTTPValidationError; + +export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + options: { + query: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary Get Board Snapshot + */ + +export function useGetBoardSnapshotApiV1BoardsBoardIdSnapshotGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getGetBoardSnapshotApiV1BoardsBoardIdSnapshotGetQueryOptions( + boardId, + options, + ); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} diff --git a/frontend/src/api/generated/custom-fields/custom-fields.ts b/frontend/src/api/generated/custom-fields/custom-fields.ts index 984078bb..2f5e1c91 100644 --- a/frontend/src/api/generated/custom-fields/custom-fields.ts +++ b/frontend/src/api/generated/custom-fields/custom-fields.ts @@ -425,6 +425,158 @@ export const useCreateOrgCustomFieldApiV1OrganizationsMeCustomFieldsPost = < queryClient, ); }; +/** + * Delete an org-level definition when it has no persisted task values. + * @summary Delete Org Custom Field + */ +export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse200 = + { + data: OkResponse; + status: 200; + }; + +export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse422 = + { + data: HTTPValidationError; + status: 422; + }; + +export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseSuccess = + deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseError = + deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse = + + | deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseSuccess + | deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseError; + +export const getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteUrl = + (taskCustomFieldDefinitionId: string) => { + return `/api/v1/organizations/me/custom-fields/${taskCustomFieldDefinitionId}`; + }; + +export const deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete = + async ( + taskCustomFieldDefinitionId: string, + options?: RequestInit, + ): Promise => { + return customFetch( + getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteUrl( + taskCustomFieldDefinitionId, + ), + { + ...options, + method: "DELETE", + }, + ); + }; + +export const getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete + > + >, + TError, + { taskCustomFieldDefinitionId: string }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType< + typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete + > + >, + TError, + { taskCustomFieldDefinitionId: string }, + TContext + > => { + const mutationKey = [ + "deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType< + typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete + > + >, + { taskCustomFieldDefinitionId: string } + > = (props) => { + const { taskCustomFieldDefinitionId } = props ?? {}; + + return deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete( + taskCustomFieldDefinitionId, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type DeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationResult = + NonNullable< + Awaited< + ReturnType< + typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete + > + > + >; + +export type DeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Delete Org Custom Field + */ +export const useDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete = + ( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete + > + >, + TError, + { taskCustomFieldDefinitionId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, + ): UseMutationResult< + Awaited< + ReturnType< + typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete + > + >, + TError, + { taskCustomFieldDefinitionId: string }, + TContext + > => { + return useMutation( + getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationOptions( + options, + ), + queryClient, + ); + }; /** * Update an organization-level task custom field definition. * @summary Update Org Custom Field @@ -597,155 +749,3 @@ export const useUpdateOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFi queryClient, ); }; -/** - * Delete an org-level definition when it has no persisted task values. - * @summary Delete Org Custom Field - */ -export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse200 = - { - data: OkResponse; - status: 200; - }; - -export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseSuccess = - deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseError = - deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponse = - - | deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseSuccess - | deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteResponseError; - -export const getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteUrl = - (taskCustomFieldDefinitionId: string) => { - return `/api/v1/organizations/me/custom-fields/${taskCustomFieldDefinitionId}`; - }; - -export const deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete = - async ( - taskCustomFieldDefinitionId: string, - options?: RequestInit, - ): Promise => { - return customFetch( - getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteUrl( - taskCustomFieldDefinitionId, - ), - { - ...options, - method: "DELETE", - }, - ); - }; - -export const getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete - > - >, - TError, - { taskCustomFieldDefinitionId: string }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType< - typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete - > - >, - TError, - { taskCustomFieldDefinitionId: string }, - TContext - > => { - const mutationKey = [ - "deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType< - typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete - > - >, - { taskCustomFieldDefinitionId: string } - > = (props) => { - const { taskCustomFieldDefinitionId } = props ?? {}; - - return deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete( - taskCustomFieldDefinitionId, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type DeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationResult = - NonNullable< - Awaited< - ReturnType< - typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete - > - > - >; - -export type DeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete Org Custom Field - */ -export const useDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete = - ( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete - > - >, - TError, - { taskCustomFieldDefinitionId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, - ): UseMutationResult< - Awaited< - ReturnType< - typeof deleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDelete - > - >, - TError, - { taskCustomFieldDefinitionId: string }, - TContext - > => { - return useMutation( - getDeleteOrgCustomFieldApiV1OrganizationsMeCustomFieldsTaskCustomFieldDefinitionIdDeleteMutationOptions( - options, - ), - queryClient, - ); - }; diff --git a/frontend/src/api/generated/gateways/gateways.ts b/frontend/src/api/generated/gateways/gateways.ts index a19963bc..63e1f9b1 100644 --- a/frontend/src/api/generated/gateways/gateways.ts +++ b/frontend/src/api/generated/gateways/gateways.ts @@ -48,34 +48,34 @@ import { customFetch } from "../../mutator"; type SecondParameter unknown> = Parameters[1]; /** - * Return gateway connectivity and session status. - * @summary Gateways Status + * List gateways for the caller's organization. + * @summary List Gateways */ -export type gatewaysStatusApiV1GatewaysStatusGetResponse200 = { - data: GatewaysStatusResponse; +export type listGatewaysApiV1GatewaysGetResponse200 = { + data: LimitOffsetPageTypeVarCustomizedGatewayRead; status: 200; }; -export type gatewaysStatusApiV1GatewaysStatusGetResponse422 = { +export type listGatewaysApiV1GatewaysGetResponse422 = { data: HTTPValidationError; status: 422; }; -export type gatewaysStatusApiV1GatewaysStatusGetResponseSuccess = - gatewaysStatusApiV1GatewaysStatusGetResponse200 & { +export type listGatewaysApiV1GatewaysGetResponseSuccess = + listGatewaysApiV1GatewaysGetResponse200 & { headers: Headers; }; -export type gatewaysStatusApiV1GatewaysStatusGetResponseError = - gatewaysStatusApiV1GatewaysStatusGetResponse422 & { +export type listGatewaysApiV1GatewaysGetResponseError = + listGatewaysApiV1GatewaysGetResponse422 & { headers: Headers; }; -export type gatewaysStatusApiV1GatewaysStatusGetResponse = - | gatewaysStatusApiV1GatewaysStatusGetResponseSuccess - | gatewaysStatusApiV1GatewaysStatusGetResponseError; +export type listGatewaysApiV1GatewaysGetResponse = + | listGatewaysApiV1GatewaysGetResponseSuccess + | listGatewaysApiV1GatewaysGetResponseError; -export const getGatewaysStatusApiV1GatewaysStatusGetUrl = ( - params?: GatewaysStatusApiV1GatewaysStatusGetParams, +export const getListGatewaysApiV1GatewaysGetUrl = ( + params?: ListGatewaysApiV1GatewaysGetParams, ) => { const normalizedParams = new URLSearchParams(); @@ -88,16 +88,16 @@ export const getGatewaysStatusApiV1GatewaysStatusGetUrl = ( const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 - ? `/api/v1/gateways/status?${stringifiedParams}` - : `/api/v1/gateways/status`; + ? `/api/v1/gateways?${stringifiedParams}` + : `/api/v1/gateways`; }; -export const gatewaysStatusApiV1GatewaysStatusGet = async ( - params?: GatewaysStatusApiV1GatewaysStatusGetParams, +export const listGatewaysApiV1GatewaysGet = async ( + params?: ListGatewaysApiV1GatewaysGetParams, options?: RequestInit, -): Promise => { - return customFetch( - getGatewaysStatusApiV1GatewaysStatusGetUrl(params), +): Promise => { + return customFetch( + getListGatewaysApiV1GatewaysGetUrl(params), { ...options, method: "GET", @@ -105,21 +105,21 @@ export const gatewaysStatusApiV1GatewaysStatusGet = async ( ); }; -export const getGatewaysStatusApiV1GatewaysStatusGetQueryKey = ( - params?: GatewaysStatusApiV1GatewaysStatusGetParams, +export const getListGatewaysApiV1GatewaysGetQueryKey = ( + params?: ListGatewaysApiV1GatewaysGetParams, ) => { - return [`/api/v1/gateways/status`, ...(params ? [params] : [])] as const; + return [`/api/v1/gateways`, ...(params ? [params] : [])] as const; }; -export const getGatewaysStatusApiV1GatewaysStatusGetQueryOptions = < - TData = Awaited>, +export const getListGatewaysApiV1GatewaysGetQueryOptions = < + TData = Awaited>, TError = HTTPValidationError, >( - params?: GatewaysStatusApiV1GatewaysStatusGetParams, + params?: ListGatewaysApiV1GatewaysGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -130,45 +130,43 @@ export const getGatewaysStatusApiV1GatewaysStatusGetQueryOptions = < const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = - queryOptions?.queryKey ?? - getGatewaysStatusApiV1GatewaysStatusGetQueryKey(params); + queryOptions?.queryKey ?? getListGatewaysApiV1GatewaysGetQueryKey(params); const queryFn: QueryFunction< - Awaited> + Awaited> > = ({ signal }) => - gatewaysStatusApiV1GatewaysStatusGet(params, { signal, ...requestOptions }); + listGatewaysApiV1GatewaysGet(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, + Awaited>, TError, TData > & { queryKey: DataTag }; }; -export type GatewaysStatusApiV1GatewaysStatusGetQueryResult = NonNullable< - Awaited> +export type ListGatewaysApiV1GatewaysGetQueryResult = NonNullable< + Awaited> >; -export type GatewaysStatusApiV1GatewaysStatusGetQueryError = - HTTPValidationError; +export type ListGatewaysApiV1GatewaysGetQueryError = HTTPValidationError; -export function useGatewaysStatusApiV1GatewaysStatusGet< - TData = Awaited>, +export function useListGatewaysApiV1GatewaysGet< + TData = Awaited>, TError = HTTPValidationError, >( - params: undefined | GatewaysStatusApiV1GatewaysStatusGetParams, + params: undefined | ListGatewaysApiV1GatewaysGetParams, options: { query: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > > & Pick< DefinedInitialDataOptions< - Awaited>, + Awaited>, TError, - Awaited> + Awaited> >, "initialData" >; @@ -178,24 +176,24 @@ export function useGatewaysStatusApiV1GatewaysStatusGet< ): DefinedUseQueryResult & { queryKey: DataTag; }; -export function useGatewaysStatusApiV1GatewaysStatusGet< - TData = Awaited>, +export function useListGatewaysApiV1GatewaysGet< + TData = Awaited>, TError = HTTPValidationError, >( - params?: GatewaysStatusApiV1GatewaysStatusGetParams, + params?: ListGatewaysApiV1GatewaysGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > > & Pick< UndefinedInitialDataOptions< - Awaited>, + Awaited>, TError, - Awaited> + Awaited> >, "initialData" >; @@ -205,15 +203,15 @@ export function useGatewaysStatusApiV1GatewaysStatusGet< ): UseQueryResult & { queryKey: DataTag; }; -export function useGatewaysStatusApiV1GatewaysStatusGet< - TData = Awaited>, +export function useListGatewaysApiV1GatewaysGet< + TData = Awaited>, TError = HTTPValidationError, >( - params?: GatewaysStatusApiV1GatewaysStatusGetParams, + params?: ListGatewaysApiV1GatewaysGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -225,18 +223,18 @@ export function useGatewaysStatusApiV1GatewaysStatusGet< queryKey: DataTag; }; /** - * @summary Gateways Status + * @summary List Gateways */ -export function useGatewaysStatusApiV1GatewaysStatusGet< - TData = Awaited>, +export function useListGatewaysApiV1GatewaysGet< + TData = Awaited>, TError = HTTPValidationError, >( - params?: GatewaysStatusApiV1GatewaysStatusGetParams, + params?: ListGatewaysApiV1GatewaysGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -247,7 +245,7 @@ export function useGatewaysStatusApiV1GatewaysStatusGet< ): UseQueryResult & { queryKey: DataTag; } { - const queryOptions = getGatewaysStatusApiV1GatewaysStatusGetQueryOptions( + const queryOptions = getListGatewaysApiV1GatewaysGetQueryOptions( params, options, ); @@ -260,6 +258,299 @@ export function useGatewaysStatusApiV1GatewaysStatusGet< return { ...query, queryKey: queryOptions.queryKey }; } +/** + * Create a gateway and provision or refresh its main agent. + * @summary Create Gateway + */ +export type createGatewayApiV1GatewaysPostResponse200 = { + data: GatewayRead; + status: 200; +}; + +export type createGatewayApiV1GatewaysPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createGatewayApiV1GatewaysPostResponseSuccess = + createGatewayApiV1GatewaysPostResponse200 & { + headers: Headers; + }; +export type createGatewayApiV1GatewaysPostResponseError = + createGatewayApiV1GatewaysPostResponse422 & { + headers: Headers; + }; + +export type createGatewayApiV1GatewaysPostResponse = + | createGatewayApiV1GatewaysPostResponseSuccess + | createGatewayApiV1GatewaysPostResponseError; + +export const getCreateGatewayApiV1GatewaysPostUrl = () => { + return `/api/v1/gateways`; +}; + +export const createGatewayApiV1GatewaysPost = async ( + gatewayCreate: GatewayCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateGatewayApiV1GatewaysPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(gatewayCreate), + }, + ); +}; + +export const getCreateGatewayApiV1GatewaysPostMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { data: GatewayCreate }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { data: GatewayCreate }, + TContext +> => { + const mutationKey = ["createGatewayApiV1GatewaysPost"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { data: GatewayCreate } + > = (props) => { + const { data } = props ?? {}; + + return createGatewayApiV1GatewaysPost(data, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type CreateGatewayApiV1GatewaysPostMutationResult = NonNullable< + Awaited> +>; +export type CreateGatewayApiV1GatewaysPostMutationBody = GatewayCreate; +export type CreateGatewayApiV1GatewaysPostMutationError = HTTPValidationError; + +/** + * @summary Create Gateway + */ +export const useCreateGatewayApiV1GatewaysPost = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { data: GatewayCreate }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { data: GatewayCreate }, + TContext +> => { + return useMutation( + getCreateGatewayApiV1GatewaysPostMutationOptions(options), + queryClient, + ); +}; +/** + * Return supported gateway protocol methods and events. + * @summary Gateway Commands + */ +export type gatewayCommandsApiV1GatewaysCommandsGetResponse200 = { + data: GatewayCommandsResponse; + status: 200; +}; + +export type gatewayCommandsApiV1GatewaysCommandsGetResponseSuccess = + gatewayCommandsApiV1GatewaysCommandsGetResponse200 & { + headers: Headers; + }; +export type gatewayCommandsApiV1GatewaysCommandsGetResponse = + gatewayCommandsApiV1GatewaysCommandsGetResponseSuccess; + +export const getGatewayCommandsApiV1GatewaysCommandsGetUrl = () => { + return `/api/v1/gateways/commands`; +}; + +export const gatewayCommandsApiV1GatewaysCommandsGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getGatewayCommandsApiV1GatewaysCommandsGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +export const getGatewayCommandsApiV1GatewaysCommandsGetQueryKey = () => { + return [`/api/v1/gateways/commands`] as const; +}; + +export const getGatewayCommandsApiV1GatewaysCommandsGetQueryOptions = < + TData = Awaited>, + TError = unknown, +>(options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; +}) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getGatewayCommandsApiV1GatewaysCommandsGetQueryKey(); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + gatewayCommandsApiV1GatewaysCommandsGet({ signal, ...requestOptions }); + + return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type GatewayCommandsApiV1GatewaysCommandsGetQueryResult = NonNullable< + Awaited> +>; +export type GatewayCommandsApiV1GatewaysCommandsGetQueryError = unknown; + +export function useGatewayCommandsApiV1GatewaysCommandsGet< + TData = Awaited>, + TError = unknown, +>( + options: { + query: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useGatewayCommandsApiV1GatewaysCommandsGet< + TData = Awaited>, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useGatewayCommandsApiV1GatewaysCommandsGet< + TData = Awaited>, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary Gateway Commands + */ + +export function useGatewayCommandsApiV1GatewaysCommandsGet< + TData = Awaited>, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getGatewayCommandsApiV1GatewaysCommandsGetQueryOptions(options); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + /** * List sessions for a gateway associated with a board. * @summary List Gateway Sessions @@ -1283,209 +1574,34 @@ export const useSendGatewaySessionMessageApiV1GatewaysSessionsSessionIdMessagePo ); }; /** - * Return supported gateway protocol methods and events. - * @summary Gateway Commands + * Return gateway connectivity and session status. + * @summary Gateways Status */ -export type gatewayCommandsApiV1GatewaysCommandsGetResponse200 = { - data: GatewayCommandsResponse; +export type gatewaysStatusApiV1GatewaysStatusGetResponse200 = { + data: GatewaysStatusResponse; status: 200; }; -export type gatewayCommandsApiV1GatewaysCommandsGetResponseSuccess = - gatewayCommandsApiV1GatewaysCommandsGetResponse200 & { - headers: Headers; - }; -export type gatewayCommandsApiV1GatewaysCommandsGetResponse = - gatewayCommandsApiV1GatewaysCommandsGetResponseSuccess; - -export const getGatewayCommandsApiV1GatewaysCommandsGetUrl = () => { - return `/api/v1/gateways/commands`; -}; - -export const gatewayCommandsApiV1GatewaysCommandsGet = async ( - options?: RequestInit, -): Promise => { - return customFetch( - getGatewayCommandsApiV1GatewaysCommandsGetUrl(), - { - ...options, - method: "GET", - }, - ); -}; - -export const getGatewayCommandsApiV1GatewaysCommandsGetQueryKey = () => { - return [`/api/v1/gateways/commands`] as const; -}; - -export const getGatewayCommandsApiV1GatewaysCommandsGetQueryOptions = < - TData = Awaited>, - TError = unknown, ->(options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getGatewayCommandsApiV1GatewaysCommandsGetQueryKey(); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - gatewayCommandsApiV1GatewaysCommandsGet({ signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type GatewayCommandsApiV1GatewaysCommandsGetQueryResult = NonNullable< - Awaited> ->; -export type GatewayCommandsApiV1GatewaysCommandsGetQueryError = unknown; - -export function useGatewayCommandsApiV1GatewaysCommandsGet< - TData = Awaited>, - TError = unknown, ->( - options: { - query: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited>, - TError, - Awaited> - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useGatewayCommandsApiV1GatewaysCommandsGet< - TData = Awaited>, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited>, - TError, - Awaited> - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useGatewayCommandsApiV1GatewaysCommandsGet< - TData = Awaited>, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary Gateway Commands - */ - -export function useGatewayCommandsApiV1GatewaysCommandsGet< - TData = Awaited>, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getGatewayCommandsApiV1GatewaysCommandsGetQueryOptions(options); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * List gateways for the caller's organization. - * @summary List Gateways - */ -export type listGatewaysApiV1GatewaysGetResponse200 = { - data: LimitOffsetPageTypeVarCustomizedGatewayRead; - status: 200; -}; - -export type listGatewaysApiV1GatewaysGetResponse422 = { +export type gatewaysStatusApiV1GatewaysStatusGetResponse422 = { data: HTTPValidationError; status: 422; }; -export type listGatewaysApiV1GatewaysGetResponseSuccess = - listGatewaysApiV1GatewaysGetResponse200 & { +export type gatewaysStatusApiV1GatewaysStatusGetResponseSuccess = + gatewaysStatusApiV1GatewaysStatusGetResponse200 & { headers: Headers; }; -export type listGatewaysApiV1GatewaysGetResponseError = - listGatewaysApiV1GatewaysGetResponse422 & { +export type gatewaysStatusApiV1GatewaysStatusGetResponseError = + gatewaysStatusApiV1GatewaysStatusGetResponse422 & { headers: Headers; }; -export type listGatewaysApiV1GatewaysGetResponse = - | listGatewaysApiV1GatewaysGetResponseSuccess - | listGatewaysApiV1GatewaysGetResponseError; +export type gatewaysStatusApiV1GatewaysStatusGetResponse = + | gatewaysStatusApiV1GatewaysStatusGetResponseSuccess + | gatewaysStatusApiV1GatewaysStatusGetResponseError; -export const getListGatewaysApiV1GatewaysGetUrl = ( - params?: ListGatewaysApiV1GatewaysGetParams, +export const getGatewaysStatusApiV1GatewaysStatusGetUrl = ( + params?: GatewaysStatusApiV1GatewaysStatusGetParams, ) => { const normalizedParams = new URLSearchParams(); @@ -1498,16 +1614,16 @@ export const getListGatewaysApiV1GatewaysGetUrl = ( const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 - ? `/api/v1/gateways?${stringifiedParams}` - : `/api/v1/gateways`; + ? `/api/v1/gateways/status?${stringifiedParams}` + : `/api/v1/gateways/status`; }; -export const listGatewaysApiV1GatewaysGet = async ( - params?: ListGatewaysApiV1GatewaysGetParams, +export const gatewaysStatusApiV1GatewaysStatusGet = async ( + params?: GatewaysStatusApiV1GatewaysStatusGetParams, options?: RequestInit, -): Promise => { - return customFetch( - getListGatewaysApiV1GatewaysGetUrl(params), +): Promise => { + return customFetch( + getGatewaysStatusApiV1GatewaysStatusGetUrl(params), { ...options, method: "GET", @@ -1515,21 +1631,21 @@ export const listGatewaysApiV1GatewaysGet = async ( ); }; -export const getListGatewaysApiV1GatewaysGetQueryKey = ( - params?: ListGatewaysApiV1GatewaysGetParams, +export const getGatewaysStatusApiV1GatewaysStatusGetQueryKey = ( + params?: GatewaysStatusApiV1GatewaysStatusGetParams, ) => { - return [`/api/v1/gateways`, ...(params ? [params] : [])] as const; + return [`/api/v1/gateways/status`, ...(params ? [params] : [])] as const; }; -export const getListGatewaysApiV1GatewaysGetQueryOptions = < - TData = Awaited>, +export const getGatewaysStatusApiV1GatewaysStatusGetQueryOptions = < + TData = Awaited>, TError = HTTPValidationError, >( - params?: ListGatewaysApiV1GatewaysGetParams, + params?: GatewaysStatusApiV1GatewaysStatusGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -1540,43 +1656,45 @@ export const getListGatewaysApiV1GatewaysGetQueryOptions = < const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = - queryOptions?.queryKey ?? getListGatewaysApiV1GatewaysGetQueryKey(params); + queryOptions?.queryKey ?? + getGatewaysStatusApiV1GatewaysStatusGetQueryKey(params); const queryFn: QueryFunction< - Awaited> + Awaited> > = ({ signal }) => - listGatewaysApiV1GatewaysGet(params, { signal, ...requestOptions }); + gatewaysStatusApiV1GatewaysStatusGet(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, + Awaited>, TError, TData > & { queryKey: DataTag }; }; -export type ListGatewaysApiV1GatewaysGetQueryResult = NonNullable< - Awaited> +export type GatewaysStatusApiV1GatewaysStatusGetQueryResult = NonNullable< + Awaited> >; -export type ListGatewaysApiV1GatewaysGetQueryError = HTTPValidationError; +export type GatewaysStatusApiV1GatewaysStatusGetQueryError = + HTTPValidationError; -export function useListGatewaysApiV1GatewaysGet< - TData = Awaited>, +export function useGatewaysStatusApiV1GatewaysStatusGet< + TData = Awaited>, TError = HTTPValidationError, >( - params: undefined | ListGatewaysApiV1GatewaysGetParams, + params: undefined | GatewaysStatusApiV1GatewaysStatusGetParams, options: { query: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > > & Pick< DefinedInitialDataOptions< - Awaited>, + Awaited>, TError, - Awaited> + Awaited> >, "initialData" >; @@ -1586,24 +1704,24 @@ export function useListGatewaysApiV1GatewaysGet< ): DefinedUseQueryResult & { queryKey: DataTag; }; -export function useListGatewaysApiV1GatewaysGet< - TData = Awaited>, +export function useGatewaysStatusApiV1GatewaysStatusGet< + TData = Awaited>, TError = HTTPValidationError, >( - params?: ListGatewaysApiV1GatewaysGetParams, + params?: GatewaysStatusApiV1GatewaysStatusGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > > & Pick< UndefinedInitialDataOptions< - Awaited>, + Awaited>, TError, - Awaited> + Awaited> >, "initialData" >; @@ -1613,15 +1731,15 @@ export function useListGatewaysApiV1GatewaysGet< ): UseQueryResult & { queryKey: DataTag; }; -export function useListGatewaysApiV1GatewaysGet< - TData = Awaited>, +export function useGatewaysStatusApiV1GatewaysStatusGet< + TData = Awaited>, TError = HTTPValidationError, >( - params?: ListGatewaysApiV1GatewaysGetParams, + params?: GatewaysStatusApiV1GatewaysStatusGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -1633,18 +1751,18 @@ export function useListGatewaysApiV1GatewaysGet< queryKey: DataTag; }; /** - * @summary List Gateways + * @summary Gateways Status */ -export function useListGatewaysApiV1GatewaysGet< - TData = Awaited>, +export function useGatewaysStatusApiV1GatewaysStatusGet< + TData = Awaited>, TError = HTTPValidationError, >( - params?: ListGatewaysApiV1GatewaysGetParams, + params?: GatewaysStatusApiV1GatewaysStatusGetParams, options?: { query?: Partial< UseQueryOptions< - Awaited>, + Awaited>, TError, TData > @@ -1655,7 +1773,7 @@ export function useListGatewaysApiV1GatewaysGet< ): UseQueryResult & { queryKey: DataTag; } { - const queryOptions = getListGatewaysApiV1GatewaysGetQueryOptions( + const queryOptions = getGatewaysStatusApiV1GatewaysStatusGetQueryOptions( params, options, ); @@ -1669,69 +1787,69 @@ export function useListGatewaysApiV1GatewaysGet< } /** - * Create a gateway and provision or refresh its main agent. - * @summary Create Gateway + * Delete a gateway in the caller's organization. + * @summary Delete Gateway */ -export type createGatewayApiV1GatewaysPostResponse200 = { - data: GatewayRead; +export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponse200 = { + data: OkResponse; status: 200; }; -export type createGatewayApiV1GatewaysPostResponse422 = { +export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponse422 = { data: HTTPValidationError; status: 422; }; -export type createGatewayApiV1GatewaysPostResponseSuccess = - createGatewayApiV1GatewaysPostResponse200 & { +export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponseSuccess = + deleteGatewayApiV1GatewaysGatewayIdDeleteResponse200 & { headers: Headers; }; -export type createGatewayApiV1GatewaysPostResponseError = - createGatewayApiV1GatewaysPostResponse422 & { +export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponseError = + deleteGatewayApiV1GatewaysGatewayIdDeleteResponse422 & { headers: Headers; }; -export type createGatewayApiV1GatewaysPostResponse = - | createGatewayApiV1GatewaysPostResponseSuccess - | createGatewayApiV1GatewaysPostResponseError; +export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponse = + | deleteGatewayApiV1GatewaysGatewayIdDeleteResponseSuccess + | deleteGatewayApiV1GatewaysGatewayIdDeleteResponseError; -export const getCreateGatewayApiV1GatewaysPostUrl = () => { - return `/api/v1/gateways`; +export const getDeleteGatewayApiV1GatewaysGatewayIdDeleteUrl = ( + gatewayId: string, +) => { + return `/api/v1/gateways/${gatewayId}`; }; -export const createGatewayApiV1GatewaysPost = async ( - gatewayCreate: GatewayCreate, +export const deleteGatewayApiV1GatewaysGatewayIdDelete = async ( + gatewayId: string, options?: RequestInit, -): Promise => { - return customFetch( - getCreateGatewayApiV1GatewaysPostUrl(), +): Promise => { + return customFetch( + getDeleteGatewayApiV1GatewaysGatewayIdDeleteUrl(gatewayId), { ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(gatewayCreate), + method: "DELETE", }, ); }; -export const getCreateGatewayApiV1GatewaysPostMutationOptions = < +export const getDeleteGatewayApiV1GatewaysGatewayIdDeleteMutationOptions = < TError = HTTPValidationError, TContext = unknown, >(options?: { mutation?: UseMutationOptions< - Awaited>, + Awaited>, TError, - { data: GatewayCreate }, + { gatewayId: string }, TContext >; request?: SecondParameter; }): UseMutationOptions< - Awaited>, + Awaited>, TError, - { data: GatewayCreate }, + { gatewayId: string }, TContext > => { - const mutationKey = ["createGatewayApiV1GatewaysPost"]; + const mutationKey = ["deleteGatewayApiV1GatewaysGatewayIdDelete"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && @@ -1741,48 +1859,50 @@ export const getCreateGatewayApiV1GatewaysPostMutationOptions = < : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< - Awaited>, - { data: GatewayCreate } + Awaited>, + { gatewayId: string } > = (props) => { - const { data } = props ?? {}; + const { gatewayId } = props ?? {}; - return createGatewayApiV1GatewaysPost(data, requestOptions); + return deleteGatewayApiV1GatewaysGatewayIdDelete(gatewayId, requestOptions); }; return { mutationFn, ...mutationOptions }; }; -export type CreateGatewayApiV1GatewaysPostMutationResult = NonNullable< - Awaited> ->; -export type CreateGatewayApiV1GatewaysPostMutationBody = GatewayCreate; -export type CreateGatewayApiV1GatewaysPostMutationError = HTTPValidationError; +export type DeleteGatewayApiV1GatewaysGatewayIdDeleteMutationResult = + NonNullable< + Awaited> + >; + +export type DeleteGatewayApiV1GatewaysGatewayIdDeleteMutationError = + HTTPValidationError; /** - * @summary Create Gateway + * @summary Delete Gateway */ -export const useCreateGatewayApiV1GatewaysPost = < +export const useDeleteGatewayApiV1GatewaysGatewayIdDelete = < TError = HTTPValidationError, TContext = unknown, >( options?: { mutation?: UseMutationOptions< - Awaited>, + Awaited>, TError, - { data: GatewayCreate }, + { gatewayId: string }, TContext >; request?: SecondParameter; }, queryClient?: QueryClient, ): UseMutationResult< - Awaited>, + Awaited>, TError, - { data: GatewayCreate }, + { gatewayId: string }, TContext > => { return useMutation( - getCreateGatewayApiV1GatewaysPostMutationOptions(options), + getDeleteGatewayApiV1GatewaysGatewayIdDeleteMutationOptions(options), queryClient, ); }; @@ -2122,126 +2242,6 @@ export const useUpdateGatewayApiV1GatewaysGatewayIdPatch = < queryClient, ); }; -/** - * Delete a gateway in the caller's organization. - * @summary Delete Gateway - */ -export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponseSuccess = - deleteGatewayApiV1GatewaysGatewayIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponseError = - deleteGatewayApiV1GatewaysGatewayIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteGatewayApiV1GatewaysGatewayIdDeleteResponse = - | deleteGatewayApiV1GatewaysGatewayIdDeleteResponseSuccess - | deleteGatewayApiV1GatewaysGatewayIdDeleteResponseError; - -export const getDeleteGatewayApiV1GatewaysGatewayIdDeleteUrl = ( - gatewayId: string, -) => { - return `/api/v1/gateways/${gatewayId}`; -}; - -export const deleteGatewayApiV1GatewaysGatewayIdDelete = async ( - gatewayId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteGatewayApiV1GatewaysGatewayIdDeleteUrl(gatewayId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteGatewayApiV1GatewaysGatewayIdDeleteMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { gatewayId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { gatewayId: string }, - TContext -> => { - const mutationKey = ["deleteGatewayApiV1GatewaysGatewayIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { gatewayId: string } - > = (props) => { - const { gatewayId } = props ?? {}; - - return deleteGatewayApiV1GatewaysGatewayIdDelete(gatewayId, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type DeleteGatewayApiV1GatewaysGatewayIdDeleteMutationResult = - NonNullable< - Awaited> - >; - -export type DeleteGatewayApiV1GatewaysGatewayIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete Gateway - */ -export const useDeleteGatewayApiV1GatewaysGatewayIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { gatewayId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { gatewayId: string }, - TContext -> => { - return useMutation( - getDeleteGatewayApiV1GatewaysGatewayIdDeleteMutationOptions(options), - queryClient, - ); -}; /** * Sync templates for a gateway and optionally rotate runtime settings. * @summary Sync Gateway Templates diff --git a/frontend/src/api/generated/model/activityEventRead.ts b/frontend/src/api/generated/model/activityEventRead.ts index ca2b7c29..88163152 100644 --- a/frontend/src/api/generated/model/activityEventRead.ts +++ b/frontend/src/api/generated/model/activityEventRead.ts @@ -4,15 +4,19 @@ * Mission Control API * OpenAPI spec version: 0.1.0 */ +import type { ActivityEventReadRouteParams } from "./activityEventReadRouteParams"; /** * Serialized activity event payload returned by activity endpoints. */ export interface ActivityEventRead { - id: string; - event_type: string; - message: string | null; agent_id: string | null; - task_id: string | null; + board_id?: string | null; created_at: string; + event_type: string; + id: string; + message: string | null; + route_name?: string | null; + route_params?: ActivityEventReadRouteParams; + task_id: string | null; } diff --git a/frontend/src/api/generated/model/activityEventReadRouteParams.ts b/frontend/src/api/generated/model/activityEventReadRouteParams.ts new file mode 100644 index 00000000..1871643f --- /dev/null +++ b/frontend/src/api/generated/model/activityEventReadRouteParams.ts @@ -0,0 +1,8 @@ +/** + * Generated by orval v8.3.0 🍺 + * Do not edit manually. + * Mission Control API + * OpenAPI spec version: 0.1.0 + */ + +export type ActivityEventReadRouteParams = { [key: string]: string } | null; diff --git a/frontend/src/api/generated/model/activityTaskCommentFeedItemRead.ts b/frontend/src/api/generated/model/activityTaskCommentFeedItemRead.ts index 9f46a58b..df534a51 100644 --- a/frontend/src/api/generated/model/activityTaskCommentFeedItemRead.ts +++ b/frontend/src/api/generated/model/activityTaskCommentFeedItemRead.ts @@ -9,14 +9,14 @@ * Denormalized task-comment feed item enriched with task and board fields. */ export interface ActivityTaskCommentFeedItemRead { - id: string; - created_at: string; - message: string | null; agent_id: string | null; agent_name?: string | null; agent_role?: string | null; - task_id: string; - task_title: string; board_id: string; board_name: string; + created_at: string; + id: string; + message: string | null; + task_id: string; + task_title: string; } diff --git a/frontend/src/api/generated/model/agentCreate.ts b/frontend/src/api/generated/model/agentCreate.ts index 3f30056f..f714f1ff 100644 --- a/frontend/src/api/generated/model/agentCreate.ts +++ b/frontend/src/api/generated/model/agentCreate.ts @@ -13,19 +13,19 @@ import type { AgentCreateIdentityProfile } from "./agentCreateIdentityProfile"; export interface AgentCreate { /** Board id that scopes this agent. Omit only when policy allows global agents. */ board_id?: string | null; - /** - * Human-readable agent display name. - * @minLength 1 - */ - name: string; - /** Current lifecycle state used by coordinator logic. */ - status?: string; /** Runtime heartbeat behavior overrides for this agent. */ heartbeat_config?: AgentCreateHeartbeatConfig; /** Optional profile hints used by routing and policy checks. */ identity_profile?: AgentCreateIdentityProfile; /** Template that helps define initial intent and behavior. */ identity_template?: string | null; + /** + * Human-readable agent display name. + * @minLength 1 + */ + name: string; /** Template representing deeper agent instructions. */ soul_template?: string | null; + /** Current lifecycle state used by coordinator logic. */ + status?: string; } diff --git a/frontend/src/api/generated/model/agentHealthStatusResponse.ts b/frontend/src/api/generated/model/agentHealthStatusResponse.ts index 067846b2..20e8d16e 100644 --- a/frontend/src/api/generated/model/agentHealthStatusResponse.ts +++ b/frontend/src/api/generated/model/agentHealthStatusResponse.ts @@ -9,16 +9,16 @@ * Agent-authenticated liveness payload for agent route probes. */ export interface AgentHealthStatusResponse { - /** Indicates whether the probe check succeeded. */ - ok: boolean; /** Authenticated agent id derived from `X-Agent-Token`. */ agent_id: string; /** Board scope for the authenticated agent, when applicable. */ board_id?: string | null; /** Gateway owning the authenticated agent. */ gateway_id: string; - /** Current persisted lifecycle status for the authenticated agent. */ - status: string; /** Whether the authenticated agent is the board lead. */ is_board_lead: boolean; + /** Indicates whether the probe check succeeded. */ + ok: boolean; + /** Current persisted lifecycle status for the authenticated agent. */ + status: string; } diff --git a/frontend/src/api/generated/model/agentHeartbeatCreate.ts b/frontend/src/api/generated/model/agentHeartbeatCreate.ts index 9620c266..7e83d622 100644 --- a/frontend/src/api/generated/model/agentHeartbeatCreate.ts +++ b/frontend/src/api/generated/model/agentHeartbeatCreate.ts @@ -9,13 +9,13 @@ * Heartbeat payload used to create an agent lazily. */ export interface AgentHeartbeatCreate { - /** Agent health status string. */ - status?: string | null; + /** Optional board context for bootstrap. */ + board_id?: string | null; /** * Display name assigned during first heartbeat bootstrap. * @minLength 1 */ name: string; - /** Optional board context for bootstrap. */ - board_id?: string | null; + /** Agent health status string. */ + status?: string | null; } diff --git a/frontend/src/api/generated/model/agentRead.ts b/frontend/src/api/generated/model/agentRead.ts index 4b9fa5fe..99658f7f 100644 --- a/frontend/src/api/generated/model/agentRead.ts +++ b/frontend/src/api/generated/model/agentRead.ts @@ -13,35 +13,35 @@ import type { AgentReadIdentityProfile } from "./agentReadIdentityProfile"; export interface AgentRead { /** Board id that scopes this agent. Omit only when policy allows global agents. */ board_id?: string | null; + /** Creation timestamp. */ + created_at: string; + /** Gateway UUID that manages this agent. */ + gateway_id: string; + /** Runtime heartbeat behavior overrides for this agent. */ + heartbeat_config?: AgentReadHeartbeatConfig; + /** Agent UUID. */ + id: string; + /** Optional profile hints used by routing and policy checks. */ + identity_profile?: AgentReadIdentityProfile; + /** Template that helps define initial intent and behavior. */ + identity_template?: string | null; + /** Whether this agent is the board lead. */ + is_board_lead?: boolean; + /** Whether this agent is the primary gateway agent. */ + is_gateway_main?: boolean; + /** Last heartbeat timestamp. */ + last_seen_at?: string | null; /** * Human-readable agent display name. * @minLength 1 */ name: string; - /** Current lifecycle state used by coordinator logic. */ - status?: string; - /** Runtime heartbeat behavior overrides for this agent. */ - heartbeat_config?: AgentReadHeartbeatConfig; - /** Optional profile hints used by routing and policy checks. */ - identity_profile?: AgentReadIdentityProfile; - /** Template that helps define initial intent and behavior. */ - identity_template?: string | null; - /** Template representing deeper agent instructions. */ - soul_template?: string | null; - /** Agent UUID. */ - id: string; - /** Gateway UUID that manages this agent. */ - gateway_id: string; - /** Whether this agent is the board lead. */ - is_board_lead?: boolean; - /** Whether this agent is the primary gateway agent. */ - is_gateway_main?: boolean; /** Optional openclaw session token. */ openclaw_session_id?: string | null; - /** Last heartbeat timestamp. */ - last_seen_at?: string | null; - /** Creation timestamp. */ - created_at: string; + /** Template representing deeper agent instructions. */ + soul_template?: string | null; + /** Current lifecycle state used by coordinator logic. */ + status?: string; /** Last update timestamp. */ updated_at: string; } diff --git a/frontend/src/api/generated/model/agentUpdate.ts b/frontend/src/api/generated/model/agentUpdate.ts index 56b04682..1ec302aa 100644 --- a/frontend/src/api/generated/model/agentUpdate.ts +++ b/frontend/src/api/generated/model/agentUpdate.ts @@ -13,18 +13,18 @@ import type { AgentUpdateIdentityProfile } from "./agentUpdateIdentityProfile"; export interface AgentUpdate { /** Optional new board assignment. */ board_id?: string | null; - /** Whether this agent is treated as the board gateway main. */ - is_gateway_main?: boolean | null; - /** Optional replacement display name. */ - name?: string | null; - /** Optional replacement lifecycle status. */ - status?: string | null; /** Optional heartbeat policy override. */ heartbeat_config?: AgentUpdateHeartbeatConfig; /** Optional identity profile update values. */ identity_profile?: AgentUpdateIdentityProfile; /** Optional replacement identity template. */ identity_template?: string | null; + /** Whether this agent is treated as the board gateway main. */ + is_gateway_main?: boolean | null; + /** Optional replacement display name. */ + name?: string | null; /** Optional replacement soul template. */ soul_template?: string | null; + /** Optional replacement lifecycle status. */ + status?: string | null; } diff --git a/frontend/src/api/generated/model/approvalCreate.ts b/frontend/src/api/generated/model/approvalCreate.ts index ad2159ff..320c7a0a 100644 --- a/frontend/src/api/generated/model/approvalCreate.ts +++ b/frontend/src/api/generated/model/approvalCreate.ts @@ -13,16 +13,16 @@ import type { ApprovalCreateStatus } from "./approvalCreateStatus"; */ export interface ApprovalCreate { action_type: string; - task_id?: string | null; - task_ids?: string[]; - payload?: ApprovalCreatePayload; + agent_id?: string | null; /** * @minimum 0 * @maximum 100 */ confidence: number; + lead_reasoning?: string | null; + payload?: ApprovalCreatePayload; rubric_scores?: ApprovalCreateRubricScores; status?: ApprovalCreateStatus; - agent_id?: string | null; - lead_reasoning?: string | null; + task_id?: string | null; + task_ids?: string[]; } diff --git a/frontend/src/api/generated/model/approvalRead.ts b/frontend/src/api/generated/model/approvalRead.ts index 48a9c348..97158858 100644 --- a/frontend/src/api/generated/model/approvalRead.ts +++ b/frontend/src/api/generated/model/approvalRead.ts @@ -13,20 +13,20 @@ import type { ApprovalReadStatus } from "./approvalReadStatus"; */ export interface ApprovalRead { action_type: string; - task_id?: string | null; - task_ids?: string[]; - payload?: ApprovalReadPayload; + agent_id?: string | null; + board_id: string; /** * @minimum 0 * @maximum 100 */ confidence: number; + created_at: string; + id: string; + payload?: ApprovalReadPayload; + resolved_at?: string | null; rubric_scores?: ApprovalReadRubricScores; status?: ApprovalReadStatus; - id: string; - board_id: string; + task_id?: string | null; + task_ids?: string[]; task_titles?: string[]; - agent_id?: string | null; - created_at: string; - resolved_at?: string | null; } diff --git a/frontend/src/api/generated/model/blockedTaskDetail.ts b/frontend/src/api/generated/model/blockedTaskDetail.ts index beac973b..d9e71124 100644 --- a/frontend/src/api/generated/model/blockedTaskDetail.ts +++ b/frontend/src/api/generated/model/blockedTaskDetail.ts @@ -9,6 +9,6 @@ * Error detail payload listing blocking dependency task identifiers. */ export interface BlockedTaskDetail { - message: string; blocked_by_task_ids?: string[]; + message: string; } diff --git a/frontend/src/api/generated/model/boardCreate.ts b/frontend/src/api/generated/model/boardCreate.ts index b518bd82..915e26f0 100644 --- a/frontend/src/api/generated/model/boardCreate.ts +++ b/frontend/src/api/generated/model/boardCreate.ts @@ -10,22 +10,22 @@ import type { BoardCreateSuccessMetrics } from "./boardCreateSuccessMetrics"; * Payload for creating a board. */ export interface BoardCreate { - name: string; - slug: string; - description: string; - gateway_id?: string | null; + block_status_changes_with_pending_approval?: boolean; board_group_id?: string | null; board_type?: string; - objective?: string | null; - success_metrics?: BoardCreateSuccessMetrics; - target_date?: string | null; + comment_required_for_review?: boolean; + description: string; + gateway_id?: string | null; goal_confirmed?: boolean; goal_source?: string | null; - require_approval_for_done?: boolean; - require_review_before_done?: boolean; - comment_required_for_review?: boolean; - block_status_changes_with_pending_approval?: boolean; - only_lead_can_change_status?: boolean; /** @minimum 0 */ max_agents?: number; + name: string; + objective?: string | null; + only_lead_can_change_status?: boolean; + require_approval_for_done?: boolean; + require_review_before_done?: boolean; + slug: string; + success_metrics?: BoardCreateSuccessMetrics; + target_date?: string | null; } diff --git a/frontend/src/api/generated/model/boardGroupCreate.ts b/frontend/src/api/generated/model/boardGroupCreate.ts index 96ac5a33..bd7da983 100644 --- a/frontend/src/api/generated/model/boardGroupCreate.ts +++ b/frontend/src/api/generated/model/boardGroupCreate.ts @@ -9,7 +9,7 @@ * Payload for creating a board group. */ export interface BoardGroupCreate { + description?: string | null; name: string; slug: string; - description?: string | null; } diff --git a/frontend/src/api/generated/model/boardGroupHeartbeatApplyResult.ts b/frontend/src/api/generated/model/boardGroupHeartbeatApplyResult.ts index 298eb90e..d5bb950a 100644 --- a/frontend/src/api/generated/model/boardGroupHeartbeatApplyResult.ts +++ b/frontend/src/api/generated/model/boardGroupHeartbeatApplyResult.ts @@ -11,7 +11,7 @@ import type { BoardGroupHeartbeatApplyResultRequested } from "./boardGroupHeartb */ export interface BoardGroupHeartbeatApplyResult { board_group_id: string; + failed_agent_ids: string[]; requested: BoardGroupHeartbeatApplyResultRequested; updated_agent_ids: string[]; - failed_agent_ids: string[]; } diff --git a/frontend/src/api/generated/model/boardGroupMemoryCreate.ts b/frontend/src/api/generated/model/boardGroupMemoryCreate.ts index 547af52a..92bac015 100644 --- a/frontend/src/api/generated/model/boardGroupMemoryCreate.ts +++ b/frontend/src/api/generated/model/boardGroupMemoryCreate.ts @@ -11,6 +11,6 @@ export interface BoardGroupMemoryCreate { /** @minLength 1 */ content: string; - tags?: string[] | null; source?: string | null; + tags?: string[] | null; } diff --git a/frontend/src/api/generated/model/boardGroupMemoryRead.ts b/frontend/src/api/generated/model/boardGroupMemoryRead.ts index ba2d1a14..364d468d 100644 --- a/frontend/src/api/generated/model/boardGroupMemoryRead.ts +++ b/frontend/src/api/generated/model/boardGroupMemoryRead.ts @@ -9,11 +9,11 @@ * Serialized board-group memory entry returned from read endpoints. */ export interface BoardGroupMemoryRead { - id: string; board_group_id: string; content: string; - tags?: string[] | null; - source?: string | null; - is_chat?: boolean; created_at: string; + id: string; + is_chat?: boolean; + source?: string | null; + tags?: string[] | null; } diff --git a/frontend/src/api/generated/model/boardGroupRead.ts b/frontend/src/api/generated/model/boardGroupRead.ts index 91e0a584..174c3cc7 100644 --- a/frontend/src/api/generated/model/boardGroupRead.ts +++ b/frontend/src/api/generated/model/boardGroupRead.ts @@ -9,11 +9,11 @@ * Board-group payload returned from read endpoints. */ export interface BoardGroupRead { - name: string; - slug: string; + created_at: string; description?: string | null; id: string; + name: string; organization_id: string; - created_at: string; + slug: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/boardGroupSnapshot.ts b/frontend/src/api/generated/model/boardGroupSnapshot.ts index fc668108..7f6143d4 100644 --- a/frontend/src/api/generated/model/boardGroupSnapshot.ts +++ b/frontend/src/api/generated/model/boardGroupSnapshot.ts @@ -11,6 +11,6 @@ import type { BoardGroupRead } from "./boardGroupRead"; * Top-level board-group snapshot response payload. */ export interface BoardGroupSnapshot { - group?: BoardGroupRead | null; boards?: BoardGroupBoardSnapshot[]; + group?: BoardGroupRead | null; } diff --git a/frontend/src/api/generated/model/boardGroupTaskSummary.ts b/frontend/src/api/generated/model/boardGroupTaskSummary.ts index 28b76f12..f71cb04f 100644 --- a/frontend/src/api/generated/model/boardGroupTaskSummary.ts +++ b/frontend/src/api/generated/model/boardGroupTaskSummary.ts @@ -10,17 +10,17 @@ import type { TagRef } from "./tagRef"; * Task summary row used inside board-group snapshot responses. */ export interface BoardGroupTaskSummary { - id: string; - board_id: string; - board_name: string; - title: string; - status: string; - priority: string; assigned_agent_id?: string | null; assignee?: string | null; - due_at?: string | null; - in_progress_at?: string | null; - tags?: TagRef[]; + board_id: string; + board_name: string; created_at: string; + due_at?: string | null; + id: string; + in_progress_at?: string | null; + priority: string; + status: string; + tags?: TagRef[]; + title: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/boardGroupUpdate.ts b/frontend/src/api/generated/model/boardGroupUpdate.ts index b7a6e7a4..b8318905 100644 --- a/frontend/src/api/generated/model/boardGroupUpdate.ts +++ b/frontend/src/api/generated/model/boardGroupUpdate.ts @@ -9,7 +9,7 @@ * Payload for partial board-group updates. */ export interface BoardGroupUpdate { + description?: string | null; name?: string | null; slug?: string | null; - description?: string | null; } diff --git a/frontend/src/api/generated/model/boardMemoryCreate.ts b/frontend/src/api/generated/model/boardMemoryCreate.ts index 30900a0c..f2b1afbc 100644 --- a/frontend/src/api/generated/model/boardMemoryCreate.ts +++ b/frontend/src/api/generated/model/boardMemoryCreate.ts @@ -11,6 +11,6 @@ export interface BoardMemoryCreate { /** @minLength 1 */ content: string; - tags?: string[] | null; source?: string | null; + tags?: string[] | null; } diff --git a/frontend/src/api/generated/model/boardMemoryRead.ts b/frontend/src/api/generated/model/boardMemoryRead.ts index f8b1adcc..805c493b 100644 --- a/frontend/src/api/generated/model/boardMemoryRead.ts +++ b/frontend/src/api/generated/model/boardMemoryRead.ts @@ -9,11 +9,11 @@ * Serialized board memory entry returned from read endpoints. */ export interface BoardMemoryRead { - id: string; board_id: string; content: string; - tags?: string[] | null; - source?: string | null; - is_chat?: boolean; created_at: string; + id: string; + is_chat?: boolean; + source?: string | null; + tags?: string[] | null; } diff --git a/frontend/src/api/generated/model/boardOnboardingAgentComplete.ts b/frontend/src/api/generated/model/boardOnboardingAgentComplete.ts index 351f258c..a2be93e4 100644 --- a/frontend/src/api/generated/model/boardOnboardingAgentComplete.ts +++ b/frontend/src/api/generated/model/boardOnboardingAgentComplete.ts @@ -13,10 +13,10 @@ import type { BoardOnboardingUserProfile } from "./boardOnboardingUserProfile"; */ export interface BoardOnboardingAgentComplete { board_type: string; + lead_agent?: BoardOnboardingLeadAgentDraft | null; objective?: string | null; + status: "complete"; success_metrics?: BoardOnboardingAgentCompleteSuccessMetrics; target_date?: string | null; - status: "complete"; user_profile?: BoardOnboardingUserProfile | null; - lead_agent?: BoardOnboardingLeadAgentDraft | null; } diff --git a/frontend/src/api/generated/model/boardOnboardingAgentQuestion.ts b/frontend/src/api/generated/model/boardOnboardingAgentQuestion.ts index cef146c2..2ca429e9 100644 --- a/frontend/src/api/generated/model/boardOnboardingAgentQuestion.ts +++ b/frontend/src/api/generated/model/boardOnboardingAgentQuestion.ts @@ -10,8 +10,8 @@ import type { BoardOnboardingQuestionOption } from "./boardOnboardingQuestionOpt * Question payload emitted by the onboarding assistant. */ export interface BoardOnboardingAgentQuestion { - /** @minLength 1 */ - question: string; /** @minItems 1 */ options: BoardOnboardingQuestionOption[]; + /** @minLength 1 */ + question: string; } diff --git a/frontend/src/api/generated/model/boardOnboardingLeadAgentDraft.ts b/frontend/src/api/generated/model/boardOnboardingLeadAgentDraft.ts index 5778dcdb..a1bf356d 100644 --- a/frontend/src/api/generated/model/boardOnboardingLeadAgentDraft.ts +++ b/frontend/src/api/generated/model/boardOnboardingLeadAgentDraft.ts @@ -10,11 +10,11 @@ import type { BoardOnboardingLeadAgentDraftIdentityProfile } from "./boardOnboar * Editable lead-agent draft configuration. */ export interface BoardOnboardingLeadAgentDraft { - name?: string | null; - identity_profile?: BoardOnboardingLeadAgentDraftIdentityProfile; autonomy_level?: "ask_first" | "balanced" | "autonomous" | null; - verbosity?: "concise" | "balanced" | "detailed" | null; + custom_instructions?: string | null; + identity_profile?: BoardOnboardingLeadAgentDraftIdentityProfile; + name?: string | null; output_format?: "bullets" | "mixed" | "narrative" | null; update_cadence?: "asap" | "hourly" | "daily" | "weekly" | null; - custom_instructions?: string | null; + verbosity?: "concise" | "balanced" | "detailed" | null; } diff --git a/frontend/src/api/generated/model/boardOnboardingRead.ts b/frontend/src/api/generated/model/boardOnboardingRead.ts index 61135086..e93ae067 100644 --- a/frontend/src/api/generated/model/boardOnboardingRead.ts +++ b/frontend/src/api/generated/model/boardOnboardingRead.ts @@ -11,12 +11,12 @@ import type { BoardOnboardingReadMessages } from "./boardOnboardingReadMessages" * Stored onboarding session state returned by API endpoints. */ export interface BoardOnboardingRead { - id: string; board_id: string; + created_at: string; + draft_goal?: BoardOnboardingAgentComplete | null; + id: string; + messages?: BoardOnboardingReadMessages; session_key: string; status: string; - messages?: BoardOnboardingReadMessages; - draft_goal?: BoardOnboardingAgentComplete | null; - created_at: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/boardOnboardingUserProfile.ts b/frontend/src/api/generated/model/boardOnboardingUserProfile.ts index 10d2599a..8c933ac7 100644 --- a/frontend/src/api/generated/model/boardOnboardingUserProfile.ts +++ b/frontend/src/api/generated/model/boardOnboardingUserProfile.ts @@ -9,9 +9,9 @@ * User-profile preferences gathered during onboarding. */ export interface BoardOnboardingUserProfile { + context?: string | null; + notes?: string | null; preferred_name?: string | null; pronouns?: string | null; timezone?: string | null; - notes?: string | null; - context?: string | null; } diff --git a/frontend/src/api/generated/model/boardRead.ts b/frontend/src/api/generated/model/boardRead.ts index 15f49b9a..20dc5850 100644 --- a/frontend/src/api/generated/model/boardRead.ts +++ b/frontend/src/api/generated/model/boardRead.ts @@ -10,26 +10,26 @@ import type { BoardReadSuccessMetrics } from "./boardReadSuccessMetrics"; * Board payload returned from read endpoints. */ export interface BoardRead { - name: string; - slug: string; - description: string; - gateway_id?: string | null; + block_status_changes_with_pending_approval?: boolean; board_group_id?: string | null; board_type?: string; - objective?: string | null; - success_metrics?: BoardReadSuccessMetrics; - target_date?: string | null; + comment_required_for_review?: boolean; + created_at: string; + description: string; + gateway_id?: string | null; goal_confirmed?: boolean; goal_source?: string | null; - require_approval_for_done?: boolean; - require_review_before_done?: boolean; - comment_required_for_review?: boolean; - block_status_changes_with_pending_approval?: boolean; - only_lead_can_change_status?: boolean; + id: string; /** @minimum 0 */ max_agents?: number; - id: string; + name: string; + objective?: string | null; + only_lead_can_change_status?: boolean; organization_id: string; - created_at: string; + require_approval_for_done?: boolean; + require_review_before_done?: boolean; + slug: string; + success_metrics?: BoardReadSuccessMetrics; + target_date?: string | null; updated_at: string; } diff --git a/frontend/src/api/generated/model/boardSnapshot.ts b/frontend/src/api/generated/model/boardSnapshot.ts index 10bee2fd..a7528218 100644 --- a/frontend/src/api/generated/model/boardSnapshot.ts +++ b/frontend/src/api/generated/model/boardSnapshot.ts @@ -14,10 +14,10 @@ import type { TaskCardRead } from "./taskCardRead"; * Aggregated board payload used by board snapshot endpoints. */ export interface BoardSnapshot { - board: BoardRead; - tasks: TaskCardRead[]; agents: AgentRead[]; approvals: ApprovalRead[]; + board: BoardRead; chat_messages: BoardMemoryRead[]; pending_approvals_count?: number; + tasks: TaskCardRead[]; } diff --git a/frontend/src/api/generated/model/boardUpdate.ts b/frontend/src/api/generated/model/boardUpdate.ts index 3a1b359f..bb0a8900 100644 --- a/frontend/src/api/generated/model/boardUpdate.ts +++ b/frontend/src/api/generated/model/boardUpdate.ts @@ -10,21 +10,21 @@ import type { BoardUpdateSuccessMetrics } from "./boardUpdateSuccessMetrics"; * Payload for partial board updates. */ export interface BoardUpdate { - name?: string | null; - slug?: string | null; - description?: string | null; - gateway_id?: string | null; + block_status_changes_with_pending_approval?: boolean | null; board_group_id?: string | null; board_type?: string | null; - objective?: string | null; - success_metrics?: BoardUpdateSuccessMetrics; - target_date?: string | null; + comment_required_for_review?: boolean | null; + description?: string | null; + gateway_id?: string | null; goal_confirmed?: boolean | null; goal_source?: string | null; + max_agents?: number | null; + name?: string | null; + objective?: string | null; + only_lead_can_change_status?: boolean | null; require_approval_for_done?: boolean | null; require_review_before_done?: boolean | null; - comment_required_for_review?: boolean | null; - block_status_changes_with_pending_approval?: boolean | null; - only_lead_can_change_status?: boolean | null; - max_agents?: number | null; + slug?: string | null; + success_metrics?: BoardUpdateSuccessMetrics; + target_date?: string | null; } diff --git a/frontend/src/api/generated/model/boardWebhookCreate.ts b/frontend/src/api/generated/model/boardWebhookCreate.ts index a1874834..dea943c9 100644 --- a/frontend/src/api/generated/model/boardWebhookCreate.ts +++ b/frontend/src/api/generated/model/boardWebhookCreate.ts @@ -9,8 +9,8 @@ * Payload for creating a board webhook. */ export interface BoardWebhookCreate { + agent_id?: string | null; /** @minLength 1 */ description: string; enabled?: boolean; - agent_id?: string | null; } diff --git a/frontend/src/api/generated/model/boardWebhookIngestResponse.ts b/frontend/src/api/generated/model/boardWebhookIngestResponse.ts index 179c77d7..806dcb4c 100644 --- a/frontend/src/api/generated/model/boardWebhookIngestResponse.ts +++ b/frontend/src/api/generated/model/boardWebhookIngestResponse.ts @@ -9,8 +9,8 @@ * Response payload for inbound webhook ingestion. */ export interface BoardWebhookIngestResponse { - ok?: boolean; board_id: string; - webhook_id: string; + ok?: boolean; payload_id: string; + webhook_id: string; } diff --git a/frontend/src/api/generated/model/boardWebhookPayloadRead.ts b/frontend/src/api/generated/model/boardWebhookPayloadRead.ts index ebd79a3b..846b388c 100644 --- a/frontend/src/api/generated/model/boardWebhookPayloadRead.ts +++ b/frontend/src/api/generated/model/boardWebhookPayloadRead.ts @@ -11,12 +11,12 @@ import type { BoardWebhookPayloadReadPayload } from "./boardWebhookPayloadReadPa * Serialized stored webhook payload. */ export interface BoardWebhookPayloadRead { - id: string; board_id: string; - webhook_id: string; - payload?: BoardWebhookPayloadReadPayload; - headers?: BoardWebhookPayloadReadHeaders; - source_ip?: string | null; content_type?: string | null; + headers?: BoardWebhookPayloadReadHeaders; + id: string; + payload?: BoardWebhookPayloadReadPayload; received_at: string; + source_ip?: string | null; + webhook_id: string; } diff --git a/frontend/src/api/generated/model/boardWebhookRead.ts b/frontend/src/api/generated/model/boardWebhookRead.ts index 2c8d5445..b8171337 100644 --- a/frontend/src/api/generated/model/boardWebhookRead.ts +++ b/frontend/src/api/generated/model/boardWebhookRead.ts @@ -9,13 +9,13 @@ * Serialized board webhook configuration. */ export interface BoardWebhookRead { - id: string; - board_id: string; agent_id?: string | null; + board_id: string; + created_at: string; description: string; enabled: boolean; endpoint_path: string; endpoint_url?: string | null; - created_at: string; + id: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/boardWebhookUpdate.ts b/frontend/src/api/generated/model/boardWebhookUpdate.ts index 543896b1..26356b5a 100644 --- a/frontend/src/api/generated/model/boardWebhookUpdate.ts +++ b/frontend/src/api/generated/model/boardWebhookUpdate.ts @@ -9,7 +9,7 @@ * Payload for updating a board webhook. */ export interface BoardWebhookUpdate { + agent_id?: string | null; description?: string | null; enabled?: boolean | null; - agent_id?: string | null; } diff --git a/frontend/src/api/generated/model/dashboardKpis.ts b/frontend/src/api/generated/model/dashboardKpis.ts index f35f615f..f0d8a053 100644 --- a/frontend/src/api/generated/model/dashboardKpis.ts +++ b/frontend/src/api/generated/model/dashboardKpis.ts @@ -10,7 +10,11 @@ */ export interface DashboardKpis { active_agents: number; - tasks_in_progress: number; + done_tasks: number; error_rate_pct: number; + in_progress_tasks: number; + inbox_tasks: number; median_cycle_time_hours_7d: number | null; + review_tasks: number; + tasks_in_progress: number; } diff --git a/frontend/src/api/generated/model/dashboardMetrics.ts b/frontend/src/api/generated/model/dashboardMetrics.ts index 478a3d97..ce457839 100644 --- a/frontend/src/api/generated/model/dashboardMetrics.ts +++ b/frontend/src/api/generated/model/dashboardMetrics.ts @@ -6,6 +6,7 @@ */ import type { DashboardKpis } from "./dashboardKpis"; import type { DashboardMetricsRange } from "./dashboardMetricsRange"; +import type { DashboardPendingApprovals } from "./dashboardPendingApprovals"; import type { DashboardSeriesSet } from "./dashboardSeriesSet"; import type { DashboardWipSeriesSet } from "./dashboardWipSeriesSet"; @@ -13,11 +14,12 @@ import type { DashboardWipSeriesSet } from "./dashboardWipSeriesSet"; * Complete dashboard metrics response payload. */ export interface DashboardMetrics { - range: DashboardMetricsRange; - generated_at: string; - kpis: DashboardKpis; - throughput: DashboardSeriesSet; cycle_time: DashboardSeriesSet; error_rate: DashboardSeriesSet; + generated_at: string; + kpis: DashboardKpis; + pending_approvals: DashboardPendingApprovals; + range: DashboardMetricsRange; + throughput: DashboardSeriesSet; wip: DashboardWipSeriesSet; } diff --git a/frontend/src/api/generated/model/dashboardPendingApproval.ts b/frontend/src/api/generated/model/dashboardPendingApproval.ts new file mode 100644 index 00000000..66fab8a6 --- /dev/null +++ b/frontend/src/api/generated/model/dashboardPendingApproval.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.3.0 🍺 + * Do not edit manually. + * Mission Control API + * OpenAPI spec version: 0.1.0 + */ + +/** + * Single pending approval item for cross-board dashboard listing. + */ +export interface DashboardPendingApproval { + action_type: string; + approval_id: string; + board_id: string; + board_name: string; + confidence: number; + created_at: string; + task_title?: string | null; +} diff --git a/frontend/src/api/generated/model/dashboardPendingApprovals.ts b/frontend/src/api/generated/model/dashboardPendingApprovals.ts new file mode 100644 index 00000000..26dbe842 --- /dev/null +++ b/frontend/src/api/generated/model/dashboardPendingApprovals.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.3.0 🍺 + * Do not edit manually. + * Mission Control API + * OpenAPI spec version: 0.1.0 + */ +import type { DashboardPendingApproval } from "./dashboardPendingApproval"; + +/** + * Pending approval snapshot used on the dashboard. + */ +export interface DashboardPendingApprovals { + items: DashboardPendingApproval[]; + total: number; +} diff --git a/frontend/src/api/generated/model/dashboardRangeSeries.ts b/frontend/src/api/generated/model/dashboardRangeSeries.ts index 9e3fd7ae..f996bcfa 100644 --- a/frontend/src/api/generated/model/dashboardRangeSeries.ts +++ b/frontend/src/api/generated/model/dashboardRangeSeries.ts @@ -12,7 +12,7 @@ import type { DashboardSeriesPoint } from "./dashboardSeriesPoint"; * Series payload for a single range/bucket combination. */ export interface DashboardRangeSeries { - range: DashboardRangeSeriesRange; bucket: DashboardRangeSeriesBucket; points: DashboardSeriesPoint[]; + range: DashboardRangeSeriesRange; } diff --git a/frontend/src/api/generated/model/dashboardSeriesSet.ts b/frontend/src/api/generated/model/dashboardSeriesSet.ts index c7742a2b..086f4159 100644 --- a/frontend/src/api/generated/model/dashboardSeriesSet.ts +++ b/frontend/src/api/generated/model/dashboardSeriesSet.ts @@ -10,6 +10,6 @@ import type { DashboardRangeSeries } from "./dashboardRangeSeries"; * Primary vs comparison pair for generic series metrics. */ export interface DashboardSeriesSet { - primary: DashboardRangeSeries; comparison: DashboardRangeSeries; + primary: DashboardRangeSeries; } diff --git a/frontend/src/api/generated/model/dashboardWipPoint.ts b/frontend/src/api/generated/model/dashboardWipPoint.ts index b36c941b..7390dee8 100644 --- a/frontend/src/api/generated/model/dashboardWipPoint.ts +++ b/frontend/src/api/generated/model/dashboardWipPoint.ts @@ -9,9 +9,9 @@ * Work-in-progress point split by task status buckets. */ export interface DashboardWipPoint { - period: string; - inbox: number; - in_progress: number; - review: number; done: number; + in_progress: number; + inbox: number; + period: string; + review: number; } diff --git a/frontend/src/api/generated/model/dashboardWipRangeSeries.ts b/frontend/src/api/generated/model/dashboardWipRangeSeries.ts index 26545332..e439b044 100644 --- a/frontend/src/api/generated/model/dashboardWipRangeSeries.ts +++ b/frontend/src/api/generated/model/dashboardWipRangeSeries.ts @@ -12,7 +12,7 @@ import type { DashboardWipRangeSeriesRange } from "./dashboardWipRangeSeriesRang * WIP series payload for a single range/bucket combination. */ export interface DashboardWipRangeSeries { - range: DashboardWipRangeSeriesRange; bucket: DashboardWipRangeSeriesBucket; points: DashboardWipPoint[]; + range: DashboardWipRangeSeriesRange; } diff --git a/frontend/src/api/generated/model/dashboardWipSeriesSet.ts b/frontend/src/api/generated/model/dashboardWipSeriesSet.ts index ff4c59b2..f2f9e9c6 100644 --- a/frontend/src/api/generated/model/dashboardWipSeriesSet.ts +++ b/frontend/src/api/generated/model/dashboardWipSeriesSet.ts @@ -10,6 +10,6 @@ import type { DashboardWipRangeSeries } from "./dashboardWipRangeSeries"; * Primary vs comparison pair for WIP status series metrics. */ export interface DashboardWipSeriesSet { - primary: DashboardWipRangeSeries; comparison: DashboardWipRangeSeries; + primary: DashboardWipRangeSeries; } diff --git a/frontend/src/api/generated/model/gatewayCommandsResponse.ts b/frontend/src/api/generated/model/gatewayCommandsResponse.ts index 592df7e7..d763c033 100644 --- a/frontend/src/api/generated/model/gatewayCommandsResponse.ts +++ b/frontend/src/api/generated/model/gatewayCommandsResponse.ts @@ -9,7 +9,7 @@ * Gateway command catalog and protocol metadata. */ export interface GatewayCommandsResponse { - protocol_version: number; - methods: string[]; events: string[]; + methods: string[]; + protocol_version: number; } diff --git a/frontend/src/api/generated/model/gatewayCreate.ts b/frontend/src/api/generated/model/gatewayCreate.ts index 087f1461..ee4ea5d9 100644 --- a/frontend/src/api/generated/model/gatewayCreate.ts +++ b/frontend/src/api/generated/model/gatewayCreate.ts @@ -9,10 +9,10 @@ * Payload for creating a gateway configuration. */ export interface GatewayCreate { - name: string; - url: string; - workspace_root: string; allow_insecure_tls?: boolean; disable_device_pairing?: boolean; + name: string; token?: string | null; + url: string; + workspace_root: string; } diff --git a/frontend/src/api/generated/model/gatewayLeadBroadcastBoardResult.ts b/frontend/src/api/generated/model/gatewayLeadBroadcastBoardResult.ts index dac6c6df..e490d3f8 100644 --- a/frontend/src/api/generated/model/gatewayLeadBroadcastBoardResult.ts +++ b/frontend/src/api/generated/model/gatewayLeadBroadcastBoardResult.ts @@ -11,12 +11,12 @@ export interface GatewayLeadBroadcastBoardResult { /** Target board id for this result. */ board_id: string; + /** Failure reason if this board failed. */ + error?: string | null; /** Resolved lead agent id for the target board. */ lead_agent_id?: string | null; /** Resolved lead agent display name. */ lead_agent_name?: string | null; /** Whether this board delivery succeeded. */ ok?: boolean; - /** Failure reason if this board failed. */ - error?: string | null; } diff --git a/frontend/src/api/generated/model/gatewayLeadBroadcastRequest.ts b/frontend/src/api/generated/model/gatewayLeadBroadcastRequest.ts index 1fb5fb28..e4d78dd9 100644 --- a/frontend/src/api/generated/model/gatewayLeadBroadcastRequest.ts +++ b/frontend/src/api/generated/model/gatewayLeadBroadcastRequest.ts @@ -10,19 +10,19 @@ import type { GatewayLeadBroadcastRequestKind } from "./gatewayLeadBroadcastRequ * Request payload for broadcasting a message to multiple board leads. */ export interface GatewayLeadBroadcastRequest { - /** Broadcast intent. `question` asks for responses; `handoff` requests transfer. */ - kind?: GatewayLeadBroadcastRequestKind; - /** Optional correlation token shared with downstream handlers. */ - correlation_id?: string | null; + /** Optional explicit list of board IDs; omit for lead-scoped defaults. */ + board_ids?: string[] | null; /** * Message content distributed to selected board leads. * @minLength 1 */ content: string; - /** Optional explicit list of board IDs; omit for lead-scoped defaults. */ - board_ids?: string[] | null; - /** Tags required by reply templates when each lead responds. */ - reply_tags?: string[]; + /** Optional correlation token shared with downstream handlers. */ + correlation_id?: string | null; + /** Broadcast intent. `question` asks for responses; `handoff` requests transfer. */ + kind?: GatewayLeadBroadcastRequestKind; /** Reply destination key for broadcast responses. */ reply_source?: string | null; + /** Tags required by reply templates when each lead responds. */ + reply_tags?: string[]; } diff --git a/frontend/src/api/generated/model/gatewayLeadBroadcastResponse.ts b/frontend/src/api/generated/model/gatewayLeadBroadcastResponse.ts index 42013c6e..36b905c8 100644 --- a/frontend/src/api/generated/model/gatewayLeadBroadcastResponse.ts +++ b/frontend/src/api/generated/model/gatewayLeadBroadcastResponse.ts @@ -10,11 +10,11 @@ import type { GatewayLeadBroadcastBoardResult } from "./gatewayLeadBroadcastBoar * Aggregate response for a lead broadcast operation. */ export interface GatewayLeadBroadcastResponse { - /** Whether broadcast execution succeeded. */ - ok?: boolean; - /** Number of boards successfully messaged. */ - sent?: number; /** Number of boards that failed messaging. */ failed?: number; + /** Whether broadcast execution succeeded. */ + ok?: boolean; results?: GatewayLeadBroadcastBoardResult[]; + /** Number of boards successfully messaged. */ + sent?: number; } diff --git a/frontend/src/api/generated/model/gatewayLeadMessageRequest.ts b/frontend/src/api/generated/model/gatewayLeadMessageRequest.ts index 3e64d707..0f8e1506 100644 --- a/frontend/src/api/generated/model/gatewayLeadMessageRequest.ts +++ b/frontend/src/api/generated/model/gatewayLeadMessageRequest.ts @@ -10,17 +10,17 @@ import type { GatewayLeadMessageRequestKind } from "./gatewayLeadMessageRequestK * Request payload for sending a message to a board lead agent. */ export interface GatewayLeadMessageRequest { - /** Routing mode for lead messages. */ - kind?: GatewayLeadMessageRequestKind; - /** Optional correlation token shared across upstream and downstream systems. */ - correlation_id?: string | null; /** * Human-readable body sent to lead agents. * @minLength 1 */ content: string; - /** Tags required by reply templates when the lead responds. */ - reply_tags?: string[]; + /** Optional correlation token shared across upstream and downstream systems. */ + correlation_id?: string | null; + /** Routing mode for lead messages. */ + kind?: GatewayLeadMessageRequestKind; /** Reply destination key for the orchestrator. */ reply_source?: string | null; + /** Tags required by reply templates when the lead responds. */ + reply_tags?: string[]; } diff --git a/frontend/src/api/generated/model/gatewayLeadMessageResponse.ts b/frontend/src/api/generated/model/gatewayLeadMessageResponse.ts index d890c49a..a4d35701 100644 --- a/frontend/src/api/generated/model/gatewayLeadMessageResponse.ts +++ b/frontend/src/api/generated/model/gatewayLeadMessageResponse.ts @@ -9,8 +9,6 @@ * Response payload for a lead-message dispatch attempt. */ export interface GatewayLeadMessageResponse { - /** Whether dispatch was accepted. */ - ok?: boolean; /** Board receiving the message. */ board_id: string; /** Resolved lead agent id when present. */ @@ -19,4 +17,6 @@ export interface GatewayLeadMessageResponse { lead_agent_name?: string | null; /** Whether a lead fallback actor was created during routing. */ lead_created?: boolean; + /** Whether dispatch was accepted. */ + ok?: boolean; } diff --git a/frontend/src/api/generated/model/gatewayMainAskUserRequest.ts b/frontend/src/api/generated/model/gatewayMainAskUserRequest.ts index 77c77d5a..10d58c38 100644 --- a/frontend/src/api/generated/model/gatewayMainAskUserRequest.ts +++ b/frontend/src/api/generated/model/gatewayMainAskUserRequest.ts @@ -9,17 +9,17 @@ * Request payload for asking the end user via a main gateway agent. */ export interface GatewayMainAskUserRequest { - /** Optional correlation token for tracing request/response flow. */ - correlation_id?: string | null; /** * Prompt that should be asked to the human. * @minLength 1 */ content: string; + /** Optional correlation token for tracing request/response flow. */ + correlation_id?: string | null; /** Optional preferred messaging channel. */ preferred_channel?: string | null; - /** Tags required for routing the user response. */ - reply_tags?: string[]; /** Reply destination key for user confirmation loops. */ reply_source?: string | null; + /** Tags required for routing the user response. */ + reply_tags?: string[]; } diff --git a/frontend/src/api/generated/model/gatewayMainAskUserResponse.ts b/frontend/src/api/generated/model/gatewayMainAskUserResponse.ts index 69a5c17b..599081b7 100644 --- a/frontend/src/api/generated/model/gatewayMainAskUserResponse.ts +++ b/frontend/src/api/generated/model/gatewayMainAskUserResponse.ts @@ -9,12 +9,12 @@ * Response payload for user-question dispatch via gateway main agent. */ export interface GatewayMainAskUserResponse { - /** Whether ask-user dispatch was accepted. */ - ok?: boolean; /** Board context used for the request. */ board_id: string; /** Resolved main agent id handling the ask. */ main_agent_id?: string | null; /** Resolved main agent display name. */ main_agent_name?: string | null; + /** Whether ask-user dispatch was accepted. */ + ok?: boolean; } diff --git a/frontend/src/api/generated/model/gatewayRead.ts b/frontend/src/api/generated/model/gatewayRead.ts index e7dde24e..def49115 100644 --- a/frontend/src/api/generated/model/gatewayRead.ts +++ b/frontend/src/api/generated/model/gatewayRead.ts @@ -9,14 +9,14 @@ * Gateway payload returned from read endpoints. */ export interface GatewayRead { - name: string; - url: string; - workspace_root: string; allow_insecure_tls?: boolean; + created_at: string; disable_device_pairing?: boolean; id: string; + name: string; organization_id: string; token?: string | null; - created_at: string; updated_at: string; + url: string; + workspace_root: string; } diff --git a/frontend/src/api/generated/model/gatewaySessionsResponse.ts b/frontend/src/api/generated/model/gatewaySessionsResponse.ts index fba71fc7..8cf60e10 100644 --- a/frontend/src/api/generated/model/gatewaySessionsResponse.ts +++ b/frontend/src/api/generated/model/gatewaySessionsResponse.ts @@ -9,6 +9,6 @@ * Gateway sessions list response payload. */ export interface GatewaySessionsResponse { - sessions: unknown[]; main_session?: unknown | null; + sessions: unknown[]; } diff --git a/frontend/src/api/generated/model/gatewayTemplatesSyncResult.ts b/frontend/src/api/generated/model/gatewayTemplatesSyncResult.ts index 2eb14d87..f6e19d8c 100644 --- a/frontend/src/api/generated/model/gatewayTemplatesSyncResult.ts +++ b/frontend/src/api/generated/model/gatewayTemplatesSyncResult.ts @@ -10,11 +10,11 @@ import type { GatewayTemplatesSyncError } from "./gatewayTemplatesSyncError"; * Summary payload returned by gateway template sync endpoints. */ export interface GatewayTemplatesSyncResult { + agents_skipped: number; + agents_updated: number; + errors?: GatewayTemplatesSyncError[]; gateway_id: string; include_main: boolean; - reset_sessions: boolean; - agents_updated: number; - agents_skipped: number; main_updated: boolean; - errors?: GatewayTemplatesSyncError[]; + reset_sessions: boolean; } diff --git a/frontend/src/api/generated/model/gatewayUpdate.ts b/frontend/src/api/generated/model/gatewayUpdate.ts index ba37efed..e284f972 100644 --- a/frontend/src/api/generated/model/gatewayUpdate.ts +++ b/frontend/src/api/generated/model/gatewayUpdate.ts @@ -9,10 +9,10 @@ * Payload for partial gateway updates. */ export interface GatewayUpdate { - name?: string | null; - url?: string | null; - token?: string | null; - workspace_root?: string | null; allow_insecure_tls?: boolean | null; disable_device_pairing?: boolean | null; + name?: string | null; + token?: string | null; + url?: string | null; + workspace_root?: string | null; } diff --git a/frontend/src/api/generated/model/gatewaysStatusApiV1GatewaysStatusGetParams.ts b/frontend/src/api/generated/model/gatewaysStatusApiV1GatewaysStatusGetParams.ts index ae875a56..e26eefc5 100644 --- a/frontend/src/api/generated/model/gatewaysStatusApiV1GatewaysStatusGetParams.ts +++ b/frontend/src/api/generated/model/gatewaysStatusApiV1GatewaysStatusGetParams.ts @@ -9,6 +9,6 @@ export type GatewaysStatusApiV1GatewaysStatusGetParams = { board_id?: string | null; gateway_url?: string | null; gateway_token?: string | null; - gateway_disable_device_pairing?: boolean; - gateway_allow_insecure_tls?: boolean; + gateway_disable_device_pairing?: boolean | null; + gateway_allow_insecure_tls?: boolean | null; }; diff --git a/frontend/src/api/generated/model/gatewaysStatusResponse.ts b/frontend/src/api/generated/model/gatewaysStatusResponse.ts index 0c591e17..cea5a7a7 100644 --- a/frontend/src/api/generated/model/gatewaysStatusResponse.ts +++ b/frontend/src/api/generated/model/gatewaysStatusResponse.ts @@ -10,10 +10,10 @@ */ export interface GatewaysStatusResponse { connected: boolean; + error?: string | null; gateway_url: string; - sessions_count?: number | null; - sessions?: unknown[] | null; main_session?: unknown | null; main_session_error?: string | null; - error?: string | null; + sessions?: unknown[] | null; + sessions_count?: number | null; } diff --git a/frontend/src/api/generated/model/index.ts b/frontend/src/api/generated/model/index.ts index a6b8ec2d..437fc1e0 100644 --- a/frontend/src/api/generated/model/index.ts +++ b/frontend/src/api/generated/model/index.ts @@ -6,6 +6,7 @@ */ export * from "./activityEventRead"; +export * from "./activityEventReadRouteParams"; export * from "./activityTaskCommentFeedItemRead"; export * from "./agentCreate"; export * from "./agentCreateHeartbeatConfig"; @@ -77,6 +78,8 @@ export * from "./dashboardMetrics"; export * from "./dashboardMetricsApiV1MetricsDashboardGetParams"; export * from "./dashboardMetricsApiV1MetricsDashboardGetRangeKey"; export * from "./dashboardMetricsRange"; +export * from "./dashboardPendingApproval"; +export * from "./dashboardPendingApprovals"; export * from "./dashboardRangeSeries"; export * from "./dashboardRangeSeriesBucket"; export * from "./dashboardRangeSeriesRange"; diff --git a/frontend/src/api/generated/model/lLMErrorResponse.ts b/frontend/src/api/generated/model/lLMErrorResponse.ts index f8abaaf9..683bd0b0 100644 --- a/frontend/src/api/generated/model/lLMErrorResponse.ts +++ b/frontend/src/api/generated/model/lLMErrorResponse.ts @@ -10,12 +10,12 @@ import type { LLMErrorResponseDetail } from "./lLMErrorResponseDetail"; * Standardized LLM-facing error payload used by API contracts. */ export interface LLMErrorResponse { + /** Optional machine-readable error code. */ + code?: string | null; /** Error payload. Agents should rely on `code` when present and default to `message` for fallback display. */ detail: LLMErrorResponseDetail; /** Request correlation identifier injected by middleware. */ request_id?: string | null; - /** Optional machine-readable error code. */ - code?: string | null; /** Whether a client should retry the call after remediating transient conditions. */ retryable?: boolean | null; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityEventRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityEventRead.ts index 2cb816c0..78b90866 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityEventRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityEventRead.ts @@ -8,10 +8,10 @@ import type { ActivityEventRead } from "./activityEventRead"; export interface LimitOffsetPageTypeVarCustomizedActivityEventRead { items: ActivityEventRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityTaskCommentFeedItemRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityTaskCommentFeedItemRead.ts index bf550703..f39d782b 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityTaskCommentFeedItemRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedActivityTaskCommentFeedItemRead.ts @@ -8,10 +8,10 @@ import type { ActivityTaskCommentFeedItemRead } from "./activityTaskCommentFeedI export interface LimitOffsetPageTypeVarCustomizedActivityTaskCommentFeedItemRead { items: ActivityTaskCommentFeedItemRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedAgentRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedAgentRead.ts index 64dba628..7c254542 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedAgentRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedAgentRead.ts @@ -8,10 +8,10 @@ import type { AgentRead } from "./agentRead"; export interface LimitOffsetPageTypeVarCustomizedAgentRead { items: AgentRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedApprovalRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedApprovalRead.ts index 7b912d65..0d66176c 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedApprovalRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedApprovalRead.ts @@ -8,10 +8,10 @@ import type { ApprovalRead } from "./approvalRead"; export interface LimitOffsetPageTypeVarCustomizedApprovalRead { items: ApprovalRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupMemoryRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupMemoryRead.ts index 94e07678..5588cd95 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupMemoryRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupMemoryRead.ts @@ -8,10 +8,10 @@ import type { BoardGroupMemoryRead } from "./boardGroupMemoryRead"; export interface LimitOffsetPageTypeVarCustomizedBoardGroupMemoryRead { items: BoardGroupMemoryRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupRead.ts index 95689ab5..ea0633d8 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardGroupRead.ts @@ -8,10 +8,10 @@ import type { BoardGroupRead } from "./boardGroupRead"; export interface LimitOffsetPageTypeVarCustomizedBoardGroupRead { items: BoardGroupRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardMemoryRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardMemoryRead.ts index 5af7a346..fdf4acda 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardMemoryRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardMemoryRead.ts @@ -8,10 +8,10 @@ import type { BoardMemoryRead } from "./boardMemoryRead"; export interface LimitOffsetPageTypeVarCustomizedBoardMemoryRead { items: BoardMemoryRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardRead.ts index dffce1a2..d182bde6 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardRead.ts @@ -8,10 +8,10 @@ import type { BoardRead } from "./boardRead"; export interface LimitOffsetPageTypeVarCustomizedBoardRead { items: BoardRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookPayloadRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookPayloadRead.ts index 67191dad..e9fe9f71 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookPayloadRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookPayloadRead.ts @@ -8,10 +8,10 @@ import type { BoardWebhookPayloadRead } from "./boardWebhookPayloadRead"; export interface LimitOffsetPageTypeVarCustomizedBoardWebhookPayloadRead { items: BoardWebhookPayloadRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookRead.ts index 948770b8..6bde11ec 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedBoardWebhookRead.ts @@ -8,10 +8,10 @@ import type { BoardWebhookRead } from "./boardWebhookRead"; export interface LimitOffsetPageTypeVarCustomizedBoardWebhookRead { items: BoardWebhookRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedGatewayRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedGatewayRead.ts index 26228745..3bae8a3d 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedGatewayRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedGatewayRead.ts @@ -8,10 +8,10 @@ import type { GatewayRead } from "./gatewayRead"; export interface LimitOffsetPageTypeVarCustomizedGatewayRead { items: GatewayRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationInviteRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationInviteRead.ts index 0640e516..cb770aa4 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationInviteRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationInviteRead.ts @@ -8,10 +8,10 @@ import type { OrganizationInviteRead } from "./organizationInviteRead"; export interface LimitOffsetPageTypeVarCustomizedOrganizationInviteRead { items: OrganizationInviteRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationMemberRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationMemberRead.ts index 733e3cb6..f616673f 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationMemberRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedOrganizationMemberRead.ts @@ -8,10 +8,10 @@ import type { OrganizationMemberRead } from "./organizationMemberRead"; export interface LimitOffsetPageTypeVarCustomizedOrganizationMemberRead { items: OrganizationMemberRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTagRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTagRead.ts index d1e4e40f..521dff88 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTagRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTagRead.ts @@ -8,10 +8,10 @@ import type { TagRead } from "./tagRead"; export interface LimitOffsetPageTypeVarCustomizedTagRead { items: TagRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskCommentRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskCommentRead.ts index 9fcfca2c..dcb134f1 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskCommentRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskCommentRead.ts @@ -8,10 +8,10 @@ import type { TaskCommentRead } from "./taskCommentRead"; export interface LimitOffsetPageTypeVarCustomizedTaskCommentRead { items: TaskCommentRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskRead.ts b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskRead.ts index a22715a0..789f482b 100644 --- a/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskRead.ts +++ b/frontend/src/api/generated/model/limitOffsetPageTypeVarCustomizedTaskRead.ts @@ -8,10 +8,10 @@ import type { TaskRead } from "./taskRead"; export interface LimitOffsetPageTypeVarCustomizedTaskRead { items: TaskRead[]; - /** @minimum 0 */ - total: number; /** @minimum 1 */ limit: number; /** @minimum 0 */ offset: number; + /** @minimum 0 */ + total: number; } diff --git a/frontend/src/api/generated/model/marketplaceSkillActionResponse.ts b/frontend/src/api/generated/model/marketplaceSkillActionResponse.ts index 5b081626..218a0789 100644 --- a/frontend/src/api/generated/model/marketplaceSkillActionResponse.ts +++ b/frontend/src/api/generated/model/marketplaceSkillActionResponse.ts @@ -9,8 +9,8 @@ * Install/uninstall action response payload. */ export interface MarketplaceSkillActionResponse { - ok?: boolean; - skill_id: string; gateway_id: string; installed: boolean; + ok?: boolean; + skill_id: string; } diff --git a/frontend/src/api/generated/model/marketplaceSkillCardRead.ts b/frontend/src/api/generated/model/marketplaceSkillCardRead.ts index 15051071..9d674fe7 100644 --- a/frontend/src/api/generated/model/marketplaceSkillCardRead.ts +++ b/frontend/src/api/generated/model/marketplaceSkillCardRead.ts @@ -10,17 +10,17 @@ import type { MarketplaceSkillCardReadMetadata } from "./marketplaceSkillCardRea * Marketplace card payload with gateway-specific install state. */ export interface MarketplaceSkillCardRead { - id: string; - organization_id: string; - name: string; - description?: string | null; category?: string | null; + created_at: string; + description?: string | null; + id: string; + installed: boolean; + installed_at?: string | null; + metadata?: MarketplaceSkillCardReadMetadata; + name: string; + organization_id: string; risk?: string | null; source?: string | null; source_url: string; - metadata?: MarketplaceSkillCardReadMetadata; - created_at: string; updated_at: string; - installed: boolean; - installed_at?: string | null; } diff --git a/frontend/src/api/generated/model/marketplaceSkillCreate.ts b/frontend/src/api/generated/model/marketplaceSkillCreate.ts index 7c3c0380..8b9f6763 100644 --- a/frontend/src/api/generated/model/marketplaceSkillCreate.ts +++ b/frontend/src/api/generated/model/marketplaceSkillCreate.ts @@ -9,8 +9,8 @@ * Payload used to register a skill URL in the organization marketplace. */ export interface MarketplaceSkillCreate { + description?: string | null; + name?: string | null; /** @minLength 1 */ source_url: string; - name?: string | null; - description?: string | null; } diff --git a/frontend/src/api/generated/model/marketplaceSkillRead.ts b/frontend/src/api/generated/model/marketplaceSkillRead.ts index 096f53b4..60e860bd 100644 --- a/frontend/src/api/generated/model/marketplaceSkillRead.ts +++ b/frontend/src/api/generated/model/marketplaceSkillRead.ts @@ -10,15 +10,15 @@ import type { MarketplaceSkillReadMetadata } from "./marketplaceSkillReadMetadat * Serialized marketplace skill catalog record. */ export interface MarketplaceSkillRead { - id: string; - organization_id: string; - name: string; - description?: string | null; category?: string | null; + created_at: string; + description?: string | null; + id: string; + metadata?: MarketplaceSkillReadMetadata; + name: string; + organization_id: string; risk?: string | null; source?: string | null; source_url: string; - metadata?: MarketplaceSkillReadMetadata; - created_at: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/organizationBoardAccessRead.ts b/frontend/src/api/generated/model/organizationBoardAccessRead.ts index 927cc9b0..19b75f29 100644 --- a/frontend/src/api/generated/model/organizationBoardAccessRead.ts +++ b/frontend/src/api/generated/model/organizationBoardAccessRead.ts @@ -9,10 +9,10 @@ * Board access payload returned from read endpoints. */ export interface OrganizationBoardAccessRead { - id: string; board_id: string; can_read: boolean; can_write: boolean; created_at: string; + id: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/organizationInviteCreate.ts b/frontend/src/api/generated/model/organizationInviteCreate.ts index 6cd653f0..ef8e9074 100644 --- a/frontend/src/api/generated/model/organizationInviteCreate.ts +++ b/frontend/src/api/generated/model/organizationInviteCreate.ts @@ -10,9 +10,9 @@ import type { OrganizationBoardAccessSpec } from "./organizationBoardAccessSpec" * Payload for creating an organization invite. */ export interface OrganizationInviteCreate { - invited_email: string; - role?: string; all_boards_read?: boolean; all_boards_write?: boolean; board_access?: OrganizationBoardAccessSpec[]; + invited_email: string; + role?: string; } diff --git a/frontend/src/api/generated/model/organizationInviteRead.ts b/frontend/src/api/generated/model/organizationInviteRead.ts index 643a2691..5cba137c 100644 --- a/frontend/src/api/generated/model/organizationInviteRead.ts +++ b/frontend/src/api/generated/model/organizationInviteRead.ts @@ -9,16 +9,16 @@ * Organization invite payload returned from read endpoints. */ export interface OrganizationInviteRead { - id: string; - organization_id: string; - invited_email: string; - role: string; + accepted_at?: string | null; + accepted_by_user_id?: string | null; all_boards_read: boolean; all_boards_write: boolean; - token: string; - created_by_user_id?: string | null; - accepted_by_user_id?: string | null; - accepted_at?: string | null; created_at: string; + created_by_user_id?: string | null; + id: string; + invited_email: string; + organization_id: string; + role: string; + token: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/organizationListItem.ts b/frontend/src/api/generated/model/organizationListItem.ts index 2283299c..4c3cc08f 100644 --- a/frontend/src/api/generated/model/organizationListItem.ts +++ b/frontend/src/api/generated/model/organizationListItem.ts @@ -10,7 +10,7 @@ */ export interface OrganizationListItem { id: string; + is_active: boolean; name: string; role: string; - is_active: boolean; } diff --git a/frontend/src/api/generated/model/organizationMemberRead.ts b/frontend/src/api/generated/model/organizationMemberRead.ts index 9516d4ed..5e91c9a9 100644 --- a/frontend/src/api/generated/model/organizationMemberRead.ts +++ b/frontend/src/api/generated/model/organizationMemberRead.ts @@ -11,14 +11,14 @@ import type { OrganizationUserRead } from "./organizationUserRead"; * Organization member payload including board-level access overrides. */ export interface OrganizationMemberRead { - id: string; - organization_id: string; - user_id: string; - role: string; all_boards_read: boolean; all_boards_write: boolean; + board_access?: OrganizationBoardAccessRead[]; created_at: string; + id: string; + organization_id: string; + role: string; updated_at: string; user?: OrganizationUserRead | null; - board_access?: OrganizationBoardAccessRead[]; + user_id: string; } diff --git a/frontend/src/api/generated/model/organizationRead.ts b/frontend/src/api/generated/model/organizationRead.ts index 7c161e21..8e45126d 100644 --- a/frontend/src/api/generated/model/organizationRead.ts +++ b/frontend/src/api/generated/model/organizationRead.ts @@ -9,8 +9,8 @@ * Organization payload returned by read endpoints. */ export interface OrganizationRead { + created_at: string; id: string; name: string; - created_at: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/organizationUserRead.ts b/frontend/src/api/generated/model/organizationUserRead.ts index 592145dc..490973d0 100644 --- a/frontend/src/api/generated/model/organizationUserRead.ts +++ b/frontend/src/api/generated/model/organizationUserRead.ts @@ -9,8 +9,8 @@ * Embedded user fields included in organization member payloads. */ export interface OrganizationUserRead { - id: string; email?: string | null; + id: string; name?: string | null; preferred_name?: string | null; } diff --git a/frontend/src/api/generated/model/skillPackCreate.ts b/frontend/src/api/generated/model/skillPackCreate.ts index 0e63b676..a0fa15cd 100644 --- a/frontend/src/api/generated/model/skillPackCreate.ts +++ b/frontend/src/api/generated/model/skillPackCreate.ts @@ -10,10 +10,10 @@ import type { SkillPackCreateMetadata } from "./skillPackCreateMetadata"; * Payload used to register a pack URL in the organization. */ export interface SkillPackCreate { + branch?: string; + description?: string | null; + metadata?: SkillPackCreateMetadata; + name?: string | null; /** @minLength 1 */ source_url: string; - name?: string | null; - description?: string | null; - branch?: string; - metadata?: SkillPackCreateMetadata; } diff --git a/frontend/src/api/generated/model/skillPackRead.ts b/frontend/src/api/generated/model/skillPackRead.ts index 2c0b6888..ece72578 100644 --- a/frontend/src/api/generated/model/skillPackRead.ts +++ b/frontend/src/api/generated/model/skillPackRead.ts @@ -10,14 +10,14 @@ import type { SkillPackReadMetadata } from "./skillPackReadMetadata"; * Serialized skill pack record. */ export interface SkillPackRead { - id: string; - organization_id: string; - name: string; - description?: string | null; - source_url: string; branch: string; - metadata?: SkillPackReadMetadata; - skill_count?: number; created_at: string; + description?: string | null; + id: string; + metadata?: SkillPackReadMetadata; + name: string; + organization_id: string; + skill_count?: number; + source_url: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/skillPackSyncResponse.ts b/frontend/src/api/generated/model/skillPackSyncResponse.ts index 6ac3db7b..fdcbbbcb 100644 --- a/frontend/src/api/generated/model/skillPackSyncResponse.ts +++ b/frontend/src/api/generated/model/skillPackSyncResponse.ts @@ -9,10 +9,10 @@ * Pack sync summary payload. */ export interface SkillPackSyncResponse { + created: number; ok?: boolean; pack_id: string; synced: number; - created: number; updated: number; warnings?: string[]; } diff --git a/frontend/src/api/generated/model/soulUpdateRequest.ts b/frontend/src/api/generated/model/soulUpdateRequest.ts index 7d7865a8..4e0e840f 100644 --- a/frontend/src/api/generated/model/soulUpdateRequest.ts +++ b/frontend/src/api/generated/model/soulUpdateRequest.ts @@ -10,6 +10,6 @@ */ export interface SoulUpdateRequest { content: string; - source_url?: string | null; reason?: string | null; + source_url?: string | null; } diff --git a/frontend/src/api/generated/model/soulsDirectoryMarkdownResponse.ts b/frontend/src/api/generated/model/soulsDirectoryMarkdownResponse.ts index e10e4545..a7af0d70 100644 --- a/frontend/src/api/generated/model/soulsDirectoryMarkdownResponse.ts +++ b/frontend/src/api/generated/model/soulsDirectoryMarkdownResponse.ts @@ -9,7 +9,7 @@ * Response payload containing rendered markdown for a soul. */ export interface SoulsDirectoryMarkdownResponse { + content: string; handle: string; slug: string; - content: string; } diff --git a/frontend/src/api/generated/model/soulsDirectorySoulRef.ts b/frontend/src/api/generated/model/soulsDirectorySoulRef.ts index 01bdf80a..6c1bb0a4 100644 --- a/frontend/src/api/generated/model/soulsDirectorySoulRef.ts +++ b/frontend/src/api/generated/model/soulsDirectorySoulRef.ts @@ -10,7 +10,7 @@ */ export interface SoulsDirectorySoulRef { handle: string; - slug: string; page_url: string; raw_md_url: string; + slug: string; } diff --git a/frontend/src/api/generated/model/tagCreate.ts b/frontend/src/api/generated/model/tagCreate.ts index 5c5575c6..9c754724 100644 --- a/frontend/src/api/generated/model/tagCreate.ts +++ b/frontend/src/api/generated/model/tagCreate.ts @@ -9,9 +9,9 @@ * Payload for creating a tag. */ export interface TagCreate { + color?: string; + description?: string | null; /** @minLength 1 */ name: string; slug?: string | null; - color?: string; - description?: string | null; } diff --git a/frontend/src/api/generated/model/tagRead.ts b/frontend/src/api/generated/model/tagRead.ts index 49590325..af1d3bd3 100644 --- a/frontend/src/api/generated/model/tagRead.ts +++ b/frontend/src/api/generated/model/tagRead.ts @@ -9,13 +9,13 @@ * Tag payload returned from API endpoints. */ export interface TagRead { - name: string; - slug: string; color?: string; + created_at: string; description?: string | null; id: string; + name: string; organization_id: string; + slug: string; task_count?: number; - created_at: string; updated_at: string; } diff --git a/frontend/src/api/generated/model/tagRef.ts b/frontend/src/api/generated/model/tagRef.ts index 2493c4fd..9b7d745b 100644 --- a/frontend/src/api/generated/model/tagRef.ts +++ b/frontend/src/api/generated/model/tagRef.ts @@ -9,8 +9,8 @@ * Compact tag representation embedded in task payloads. */ export interface TagRef { + color: string; id: string; name: string; slug: string; - color: string; } diff --git a/frontend/src/api/generated/model/tagUpdate.ts b/frontend/src/api/generated/model/tagUpdate.ts index 7877bcb8..4a18b9df 100644 --- a/frontend/src/api/generated/model/tagUpdate.ts +++ b/frontend/src/api/generated/model/tagUpdate.ts @@ -9,8 +9,8 @@ * Payload for partial tag updates. */ export interface TagUpdate { - name?: string | null; - slug?: string | null; color?: string | null; description?: string | null; + name?: string | null; + slug?: string | null; } diff --git a/frontend/src/api/generated/model/taskCardRead.ts b/frontend/src/api/generated/model/taskCardRead.ts index 67a51b98..02025221 100644 --- a/frontend/src/api/generated/model/taskCardRead.ts +++ b/frontend/src/api/generated/model/taskCardRead.ts @@ -12,25 +12,25 @@ import type { TaskCardReadStatus } from "./taskCardReadStatus"; * Task read model enriched with assignee and approval counters. */ export interface TaskCardRead { - title: string; - description?: string | null; - status?: TaskCardReadStatus; - priority?: string; - due_at?: string | null; - assigned_agent_id?: string | null; - depends_on_task_ids?: string[]; - tag_ids?: string[]; - id: string; - board_id: string | null; - created_by_user_id: string | null; - in_progress_at: string | null; - created_at: string; - updated_at: string; - blocked_by_task_ids?: string[]; - is_blocked?: boolean; - tags?: TagRef[]; - custom_field_values?: TaskCardReadCustomFieldValues; - assignee?: string | null; approvals_count?: number; approvals_pending_count?: number; + assigned_agent_id?: string | null; + assignee?: string | null; + blocked_by_task_ids?: string[]; + board_id: string | null; + created_at: string; + created_by_user_id: string | null; + custom_field_values?: TaskCardReadCustomFieldValues; + depends_on_task_ids?: string[]; + description?: string | null; + due_at?: string | null; + id: string; + in_progress_at: string | null; + is_blocked?: boolean; + priority?: string; + status?: TaskCardReadStatus; + tag_ids?: string[]; + tags?: TagRef[]; + title: string; + updated_at: string; } diff --git a/frontend/src/api/generated/model/taskCommentRead.ts b/frontend/src/api/generated/model/taskCommentRead.ts index 689f082c..faec4310 100644 --- a/frontend/src/api/generated/model/taskCommentRead.ts +++ b/frontend/src/api/generated/model/taskCommentRead.ts @@ -9,9 +9,9 @@ * Task comment payload returned from read endpoints. */ export interface TaskCommentRead { + agent_id: string | null; + created_at: string; id: string; message: string | null; - agent_id: string | null; task_id: string | null; - created_at: string; } diff --git a/frontend/src/api/generated/model/taskCreate.ts b/frontend/src/api/generated/model/taskCreate.ts index a3e2f7ef..a8572c23 100644 --- a/frontend/src/api/generated/model/taskCreate.ts +++ b/frontend/src/api/generated/model/taskCreate.ts @@ -11,14 +11,14 @@ import type { TaskCreateStatus } from "./taskCreateStatus"; * Payload for creating a task. */ export interface TaskCreate { - title: string; - description?: string | null; - status?: TaskCreateStatus; - priority?: string; - due_at?: string | null; assigned_agent_id?: string | null; - depends_on_task_ids?: string[]; - tag_ids?: string[]; created_by_user_id?: string | null; custom_field_values?: TaskCreateCustomFieldValues; + depends_on_task_ids?: string[]; + description?: string | null; + due_at?: string | null; + priority?: string; + status?: TaskCreateStatus; + tag_ids?: string[]; + title: string; } diff --git a/frontend/src/api/generated/model/taskCustomFieldDefinitionCreate.ts b/frontend/src/api/generated/model/taskCustomFieldDefinitionCreate.ts index 4a88dc97..b3486163 100644 --- a/frontend/src/api/generated/model/taskCustomFieldDefinitionCreate.ts +++ b/frontend/src/api/generated/model/taskCustomFieldDefinitionCreate.ts @@ -11,15 +11,15 @@ import type { TaskCustomFieldDefinitionCreateUiVisibility } from "./taskCustomFi * Payload for creating a task custom field definition. */ export interface TaskCustomFieldDefinitionCreate { - /** @minLength 1 */ - field_key: string; - label?: string | null; - field_type?: TaskCustomFieldDefinitionCreateFieldType; - ui_visibility?: TaskCustomFieldDefinitionCreateUiVisibility; - validation_regex?: string | null; - description?: string | null; - required?: boolean; - default_value?: unknown | null; /** @minItems 1 */ board_ids: string[]; + default_value?: unknown | null; + description?: string | null; + /** @minLength 1 */ + field_key: string; + field_type?: TaskCustomFieldDefinitionCreateFieldType; + label?: string | null; + required?: boolean; + ui_visibility?: TaskCustomFieldDefinitionCreateUiVisibility; + validation_regex?: string | null; } diff --git a/frontend/src/api/generated/model/taskCustomFieldDefinitionRead.ts b/frontend/src/api/generated/model/taskCustomFieldDefinitionRead.ts index 2063ba0a..52c80665 100644 --- a/frontend/src/api/generated/model/taskCustomFieldDefinitionRead.ts +++ b/frontend/src/api/generated/model/taskCustomFieldDefinitionRead.ts @@ -11,17 +11,17 @@ import type { TaskCustomFieldDefinitionReadUiVisibility } from "./taskCustomFiel * Payload returned for custom field definitions. */ export interface TaskCustomFieldDefinitionRead { - field_key: string; - label: string; - field_type: TaskCustomFieldDefinitionReadFieldType; - ui_visibility: TaskCustomFieldDefinitionReadUiVisibility; - validation_regex?: string | null; - description?: string | null; - required?: boolean; - default_value?: unknown | null; - id: string; - organization_id: string; board_ids?: string[]; created_at: string; + default_value?: unknown | null; + description?: string | null; + field_key: string; + field_type: TaskCustomFieldDefinitionReadFieldType; + id: string; + label: string; + organization_id: string; + required?: boolean; + ui_visibility: TaskCustomFieldDefinitionReadUiVisibility; updated_at: string; + validation_regex?: string | null; } diff --git a/frontend/src/api/generated/model/taskCustomFieldDefinitionUpdate.ts b/frontend/src/api/generated/model/taskCustomFieldDefinitionUpdate.ts index 68e28175..7beeb437 100644 --- a/frontend/src/api/generated/model/taskCustomFieldDefinitionUpdate.ts +++ b/frontend/src/api/generated/model/taskCustomFieldDefinitionUpdate.ts @@ -9,7 +9,9 @@ * Payload for editing an existing task custom field definition. */ export interface TaskCustomFieldDefinitionUpdate { - label?: string | null; + board_ids?: string[] | null; + default_value?: unknown | null; + description?: string | null; field_type?: | "text" | "text_long" @@ -21,10 +23,8 @@ export interface TaskCustomFieldDefinitionUpdate { | "url" | "json" | null; + label?: string | null; + required?: boolean | null; ui_visibility?: "always" | "if_set" | "hidden" | null; validation_regex?: string | null; - description?: string | null; - required?: boolean | null; - default_value?: unknown | null; - board_ids?: string[] | null; } diff --git a/frontend/src/api/generated/model/taskRead.ts b/frontend/src/api/generated/model/taskRead.ts index 25c21d8a..5d874413 100644 --- a/frontend/src/api/generated/model/taskRead.ts +++ b/frontend/src/api/generated/model/taskRead.ts @@ -12,22 +12,22 @@ import type { TaskReadStatus } from "./taskReadStatus"; * Task payload returned from read endpoints. */ export interface TaskRead { - title: string; - description?: string | null; - status?: TaskReadStatus; - priority?: string; - due_at?: string | null; assigned_agent_id?: string | null; - depends_on_task_ids?: string[]; - tag_ids?: string[]; - id: string; - board_id: string | null; - created_by_user_id: string | null; - in_progress_at: string | null; - created_at: string; - updated_at: string; blocked_by_task_ids?: string[]; - is_blocked?: boolean; - tags?: TagRef[]; + board_id: string | null; + created_at: string; + created_by_user_id: string | null; custom_field_values?: TaskReadCustomFieldValues; + depends_on_task_ids?: string[]; + description?: string | null; + due_at?: string | null; + id: string; + in_progress_at: string | null; + is_blocked?: boolean; + priority?: string; + status?: TaskReadStatus; + tag_ids?: string[]; + tags?: TagRef[]; + title: string; + updated_at: string; } diff --git a/frontend/src/api/generated/model/taskUpdate.ts b/frontend/src/api/generated/model/taskUpdate.ts index 7476476f..ddaa9936 100644 --- a/frontend/src/api/generated/model/taskUpdate.ts +++ b/frontend/src/api/generated/model/taskUpdate.ts @@ -10,14 +10,14 @@ import type { TaskUpdateCustomFieldValues } from "./taskUpdateCustomFieldValues" * Payload for partial task updates. */ export interface TaskUpdate { - title?: string | null; - description?: string | null; - status?: "inbox" | "in_progress" | "review" | "done" | null; - priority?: string | null; - due_at?: string | null; assigned_agent_id?: string | null; - depends_on_task_ids?: string[] | null; - tag_ids?: string[] | null; - custom_field_values?: TaskUpdateCustomFieldValues; comment?: string | null; + custom_field_values?: TaskUpdateCustomFieldValues; + depends_on_task_ids?: string[] | null; + description?: string | null; + due_at?: string | null; + priority?: string | null; + status?: "inbox" | "in_progress" | "review" | "done" | null; + tag_ids?: string[] | null; + title?: string | null; } diff --git a/frontend/src/api/generated/model/userRead.ts b/frontend/src/api/generated/model/userRead.ts index 6082df94..1a75f6a3 100644 --- a/frontend/src/api/generated/model/userRead.ts +++ b/frontend/src/api/generated/model/userRead.ts @@ -11,22 +11,22 @@ export interface UserRead { /** External auth provider user identifier (Clerk). */ clerk_user_id: string; + /** Additional context used by the system for personalization. */ + context?: string | null; /** Primary email address for the user. */ email?: string | null; + /** Internal user UUID. */ + id: string; + /** Whether this user has tenant-wide super-admin privileges. */ + is_super_admin: boolean; /** Full display name. */ name?: string | null; + /** Internal notes for operators. */ + notes?: string | null; /** Preferred short name used in UI. */ preferred_name?: string | null; /** Preferred pronouns. */ pronouns?: string | null; /** IANA timezone identifier. */ timezone?: string | null; - /** Internal notes for operators. */ - notes?: string | null; - /** Additional context used by the system for personalization. */ - context?: string | null; - /** Internal user UUID. */ - id: string; - /** Whether this user has tenant-wide super-admin privileges. */ - is_super_admin: boolean; } diff --git a/frontend/src/api/generated/model/userUpdate.ts b/frontend/src/api/generated/model/userUpdate.ts index 7e196385..cc9ab997 100644 --- a/frontend/src/api/generated/model/userUpdate.ts +++ b/frontend/src/api/generated/model/userUpdate.ts @@ -9,10 +9,10 @@ * Payload for partial user profile updates. */ export interface UserUpdate { + context?: string | null; name?: string | null; + notes?: string | null; preferred_name?: string | null; pronouns?: string | null; timezone?: string | null; - notes?: string | null; - context?: string | null; } diff --git a/frontend/src/api/generated/model/validationError.ts b/frontend/src/api/generated/model/validationError.ts index 1308b621..b40de80c 100644 --- a/frontend/src/api/generated/model/validationError.ts +++ b/frontend/src/api/generated/model/validationError.ts @@ -7,9 +7,9 @@ import type { ValidationErrorCtx } from "./validationErrorCtx"; export interface ValidationError { + ctx?: ValidationErrorCtx; + input?: unknown; loc: (string | number)[]; msg: string; type: string; - input?: unknown; - ctx?: ValidationErrorCtx; } diff --git a/frontend/src/api/generated/organizations/organizations.ts b/frontend/src/api/generated/organizations/organizations.ts index f330f1c4..cb756331 100644 --- a/frontend/src/api/generated/organizations/organizations.ts +++ b/frontend/src/api/generated/organizations/organizations.ts @@ -165,276 +165,191 @@ export const useCreateOrganizationApiV1OrganizationsPost = < ); }; /** - * List organizations where the current user is a member. - * @summary List My Organizations + * Accept an invite and return resulting membership. + * @summary Accept Org Invite */ -export type listMyOrganizationsApiV1OrganizationsMeListGetResponse200 = { - data: OrganizationListItem[]; +export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse200 = { + data: OrganizationMemberRead; status: 200; }; -export type listMyOrganizationsApiV1OrganizationsMeListGetResponseSuccess = - listMyOrganizationsApiV1OrganizationsMeListGetResponse200 & { - headers: Headers; - }; -export type listMyOrganizationsApiV1OrganizationsMeListGetResponse = - listMyOrganizationsApiV1OrganizationsMeListGetResponseSuccess; - -export const getListMyOrganizationsApiV1OrganizationsMeListGetUrl = () => { - return `/api/v1/organizations/me/list`; -}; - -export const listMyOrganizationsApiV1OrganizationsMeListGet = async ( - options?: RequestInit, -): Promise => { - return customFetch( - getListMyOrganizationsApiV1OrganizationsMeListGetUrl(), - { - ...options, - method: "GET", - }, - ); -}; - -export const getListMyOrganizationsApiV1OrganizationsMeListGetQueryKey = () => { - return [`/api/v1/organizations/me/list`] as const; -}; - -export const getListMyOrganizationsApiV1OrganizationsMeListGetQueryOptions = < - TData = Awaited< - ReturnType - >, - TError = unknown, ->(options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getListMyOrganizationsApiV1OrganizationsMeListGetQueryKey(); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - listMyOrganizationsApiV1OrganizationsMeListGet({ - signal, - ...requestOptions, - }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type ListMyOrganizationsApiV1OrganizationsMeListGetQueryResult = - NonNullable< - Awaited> - >; -export type ListMyOrganizationsApiV1OrganizationsMeListGetQueryError = unknown; - -export function useListMyOrganizationsApiV1OrganizationsMeListGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useListMyOrganizationsApiV1OrganizationsMeListGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useListMyOrganizationsApiV1OrganizationsMeListGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary List My Organizations - */ - -export function useListMyOrganizationsApiV1OrganizationsMeListGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getListMyOrganizationsApiV1OrganizationsMeListGetQueryOptions(options); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * Set the caller's active organization. - * @summary Set Active Org - */ -export type setActiveOrgApiV1OrganizationsMeActivePatchResponse200 = { - data: OrganizationRead; - status: 200; -}; - -export type setActiveOrgApiV1OrganizationsMeActivePatchResponse422 = { +export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse422 = { data: HTTPValidationError; status: 422; }; -export type setActiveOrgApiV1OrganizationsMeActivePatchResponseSuccess = - setActiveOrgApiV1OrganizationsMeActivePatchResponse200 & { +export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseSuccess = + acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse200 & { headers: Headers; }; -export type setActiveOrgApiV1OrganizationsMeActivePatchResponseError = - setActiveOrgApiV1OrganizationsMeActivePatchResponse422 & { +export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseError = + acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse422 & { headers: Headers; }; -export type setActiveOrgApiV1OrganizationsMeActivePatchResponse = - | setActiveOrgApiV1OrganizationsMeActivePatchResponseSuccess - | setActiveOrgApiV1OrganizationsMeActivePatchResponseError; +export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse = + | acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseSuccess + | acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseError; -export const getSetActiveOrgApiV1OrganizationsMeActivePatchUrl = () => { - return `/api/v1/organizations/me/active`; +export const getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostUrl = () => { + return `/api/v1/organizations/invites/accept`; }; -export const setActiveOrgApiV1OrganizationsMeActivePatch = async ( - organizationActiveUpdate: OrganizationActiveUpdate, +export const acceptOrgInviteApiV1OrganizationsInvitesAcceptPost = async ( + organizationInviteAccept: OrganizationInviteAccept, options?: RequestInit, -): Promise => { - return customFetch( - getSetActiveOrgApiV1OrganizationsMeActivePatchUrl(), +): Promise => { + return customFetch( + getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostUrl(), { ...options, - method: "PATCH", + method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(organizationActiveUpdate), + body: JSON.stringify(organizationInviteAccept), }, ); }; -export const getSetActiveOrgApiV1OrganizationsMeActivePatchMutationOptions = < +export const getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { data: OrganizationInviteAccept }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { data: OrganizationInviteAccept }, + TContext + > => { + const mutationKey = ["acceptOrgInviteApiV1OrganizationsInvitesAcceptPost"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType + >, + { data: OrganizationInviteAccept } + > = (props) => { + const { data } = props ?? {}; + + return acceptOrgInviteApiV1OrganizationsInvitesAcceptPost( + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type AcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type AcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationBody = + OrganizationInviteAccept; +export type AcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationError = + HTTPValidationError; + +/** + * @summary Accept Org Invite + */ +export const useAcceptOrgInviteApiV1OrganizationsInvitesAcceptPost = < TError = HTTPValidationError, TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { data: OrganizationInviteAccept }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { data: OrganizationInviteAccept }, + TContext +> => { + return useMutation( + getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationOptions( + options, + ), + queryClient, + ); +}; +/** + * Delete the active organization and related entities. + * @summary Delete My Org + */ +export type deleteMyOrgApiV1OrganizationsMeDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteMyOrgApiV1OrganizationsMeDeleteResponseSuccess = + deleteMyOrgApiV1OrganizationsMeDeleteResponse200 & { + headers: Headers; + }; +export type deleteMyOrgApiV1OrganizationsMeDeleteResponse = + deleteMyOrgApiV1OrganizationsMeDeleteResponseSuccess; + +export const getDeleteMyOrgApiV1OrganizationsMeDeleteUrl = () => { + return `/api/v1/organizations/me`; +}; + +export const deleteMyOrgApiV1OrganizationsMeDelete = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteMyOrgApiV1OrganizationsMeDeleteUrl(), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteMyOrgApiV1OrganizationsMeDeleteMutationOptions = < + TError = unknown, + TContext = unknown, >(options?: { mutation?: UseMutationOptions< - Awaited>, + Awaited>, TError, - { data: OrganizationActiveUpdate }, + void, TContext >; request?: SecondParameter; }): UseMutationOptions< - Awaited>, + Awaited>, TError, - { data: OrganizationActiveUpdate }, + void, TContext > => { - const mutationKey = ["setActiveOrgApiV1OrganizationsMeActivePatch"]; + const mutationKey = ["deleteMyOrgApiV1OrganizationsMeDelete"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && @@ -444,51 +359,46 @@ export const getSetActiveOrgApiV1OrganizationsMeActivePatchMutationOptions = < : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< - Awaited>, - { data: OrganizationActiveUpdate } - > = (props) => { - const { data } = props ?? {}; - - return setActiveOrgApiV1OrganizationsMeActivePatch(data, requestOptions); + Awaited>, + void + > = () => { + return deleteMyOrgApiV1OrganizationsMeDelete(requestOptions); }; return { mutationFn, ...mutationOptions }; }; -export type SetActiveOrgApiV1OrganizationsMeActivePatchMutationResult = - NonNullable< - Awaited> - >; -export type SetActiveOrgApiV1OrganizationsMeActivePatchMutationBody = - OrganizationActiveUpdate; -export type SetActiveOrgApiV1OrganizationsMeActivePatchMutationError = - HTTPValidationError; +export type DeleteMyOrgApiV1OrganizationsMeDeleteMutationResult = NonNullable< + Awaited> +>; + +export type DeleteMyOrgApiV1OrganizationsMeDeleteMutationError = unknown; /** - * @summary Set Active Org + * @summary Delete My Org */ -export const useSetActiveOrgApiV1OrganizationsMeActivePatch = < - TError = HTTPValidationError, +export const useDeleteMyOrgApiV1OrganizationsMeDelete = < + TError = unknown, TContext = unknown, >( options?: { mutation?: UseMutationOptions< - Awaited>, + Awaited>, TError, - { data: OrganizationActiveUpdate }, + void, TContext >; request?: SecondParameter; }, queryClient?: QueryClient, ): UseMutationResult< - Awaited>, + Awaited>, TError, - { data: OrganizationActiveUpdate }, + void, TContext > => { return useMutation( - getSetActiveOrgApiV1OrganizationsMeActivePatchMutationOptions(options), + getDeleteMyOrgApiV1OrganizationsMeDeleteMutationOptions(options), queryClient, ); }; @@ -666,55 +576,69 @@ export function useGetMyOrgApiV1OrganizationsMeGet< } /** - * Delete the active organization and related entities. - * @summary Delete My Org + * Set the caller's active organization. + * @summary Set Active Org */ -export type deleteMyOrgApiV1OrganizationsMeDeleteResponse200 = { - data: OkResponse; +export type setActiveOrgApiV1OrganizationsMeActivePatchResponse200 = { + data: OrganizationRead; status: 200; }; -export type deleteMyOrgApiV1OrganizationsMeDeleteResponseSuccess = - deleteMyOrgApiV1OrganizationsMeDeleteResponse200 & { - headers: Headers; - }; -export type deleteMyOrgApiV1OrganizationsMeDeleteResponse = - deleteMyOrgApiV1OrganizationsMeDeleteResponseSuccess; - -export const getDeleteMyOrgApiV1OrganizationsMeDeleteUrl = () => { - return `/api/v1/organizations/me`; +export type setActiveOrgApiV1OrganizationsMeActivePatchResponse422 = { + data: HTTPValidationError; + status: 422; }; -export const deleteMyOrgApiV1OrganizationsMeDelete = async ( +export type setActiveOrgApiV1OrganizationsMeActivePatchResponseSuccess = + setActiveOrgApiV1OrganizationsMeActivePatchResponse200 & { + headers: Headers; + }; +export type setActiveOrgApiV1OrganizationsMeActivePatchResponseError = + setActiveOrgApiV1OrganizationsMeActivePatchResponse422 & { + headers: Headers; + }; + +export type setActiveOrgApiV1OrganizationsMeActivePatchResponse = + | setActiveOrgApiV1OrganizationsMeActivePatchResponseSuccess + | setActiveOrgApiV1OrganizationsMeActivePatchResponseError; + +export const getSetActiveOrgApiV1OrganizationsMeActivePatchUrl = () => { + return `/api/v1/organizations/me/active`; +}; + +export const setActiveOrgApiV1OrganizationsMeActivePatch = async ( + organizationActiveUpdate: OrganizationActiveUpdate, options?: RequestInit, -): Promise => { - return customFetch( - getDeleteMyOrgApiV1OrganizationsMeDeleteUrl(), +): Promise => { + return customFetch( + getSetActiveOrgApiV1OrganizationsMeActivePatchUrl(), { ...options, - method: "DELETE", + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(organizationActiveUpdate), }, ); }; -export const getDeleteMyOrgApiV1OrganizationsMeDeleteMutationOptions = < - TError = unknown, +export const getSetActiveOrgApiV1OrganizationsMeActivePatchMutationOptions = < + TError = HTTPValidationError, TContext = unknown, >(options?: { mutation?: UseMutationOptions< - Awaited>, + Awaited>, TError, - void, + { data: OrganizationActiveUpdate }, TContext >; request?: SecondParameter; }): UseMutationOptions< - Awaited>, + Awaited>, TError, - void, + { data: OrganizationActiveUpdate }, TContext > => { - const mutationKey = ["deleteMyOrgApiV1OrganizationsMeDelete"]; + const mutationKey = ["setActiveOrgApiV1OrganizationsMeActivePatch"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && @@ -724,1212 +648,54 @@ export const getDeleteMyOrgApiV1OrganizationsMeDeleteMutationOptions = < : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< - Awaited>, - void - > = () => { - return deleteMyOrgApiV1OrganizationsMeDelete(requestOptions); + Awaited>, + { data: OrganizationActiveUpdate } + > = (props) => { + const { data } = props ?? {}; + + return setActiveOrgApiV1OrganizationsMeActivePatch(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; -export type DeleteMyOrgApiV1OrganizationsMeDeleteMutationResult = NonNullable< - Awaited> ->; - -export type DeleteMyOrgApiV1OrganizationsMeDeleteMutationError = unknown; +export type SetActiveOrgApiV1OrganizationsMeActivePatchMutationResult = + NonNullable< + Awaited> + >; +export type SetActiveOrgApiV1OrganizationsMeActivePatchMutationBody = + OrganizationActiveUpdate; +export type SetActiveOrgApiV1OrganizationsMeActivePatchMutationError = + HTTPValidationError; /** - * @summary Delete My Org + * @summary Set Active Org */ -export const useDeleteMyOrgApiV1OrganizationsMeDelete = < - TError = unknown, +export const useSetActiveOrgApiV1OrganizationsMeActivePatch = < + TError = HTTPValidationError, TContext = unknown, >( options?: { mutation?: UseMutationOptions< - Awaited>, + Awaited>, TError, - void, + { data: OrganizationActiveUpdate }, TContext >; request?: SecondParameter; }, queryClient?: QueryClient, ): UseMutationResult< - Awaited>, + Awaited>, TError, - void, + { data: OrganizationActiveUpdate }, TContext > => { return useMutation( - getDeleteMyOrgApiV1OrganizationsMeDeleteMutationOptions(options), + getSetActiveOrgApiV1OrganizationsMeActivePatchMutationOptions(options), queryClient, ); }; -/** - * Get the caller's membership record in the active organization. - * @summary Get My Membership - */ -export type getMyMembershipApiV1OrganizationsMeMemberGetResponse200 = { - data: OrganizationMemberRead; - status: 200; -}; - -export type getMyMembershipApiV1OrganizationsMeMemberGetResponseSuccess = - getMyMembershipApiV1OrganizationsMeMemberGetResponse200 & { - headers: Headers; - }; -export type getMyMembershipApiV1OrganizationsMeMemberGetResponse = - getMyMembershipApiV1OrganizationsMeMemberGetResponseSuccess; - -export const getGetMyMembershipApiV1OrganizationsMeMemberGetUrl = () => { - return `/api/v1/organizations/me/member`; -}; - -export const getMyMembershipApiV1OrganizationsMeMemberGet = async ( - options?: RequestInit, -): Promise => { - return customFetch( - getGetMyMembershipApiV1OrganizationsMeMemberGetUrl(), - { - ...options, - method: "GET", - }, - ); -}; - -export const getGetMyMembershipApiV1OrganizationsMeMemberGetQueryKey = () => { - return [`/api/v1/organizations/me/member`] as const; -}; - -export const getGetMyMembershipApiV1OrganizationsMeMemberGetQueryOptions = < - TData = Awaited< - ReturnType - >, - TError = unknown, ->(options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; -}) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getGetMyMembershipApiV1OrganizationsMeMemberGetQueryKey(); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - getMyMembershipApiV1OrganizationsMeMemberGet({ signal, ...requestOptions }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type GetMyMembershipApiV1OrganizationsMeMemberGetQueryResult = - NonNullable< - Awaited> - >; -export type GetMyMembershipApiV1OrganizationsMeMemberGetQueryError = unknown; - -export function useGetMyMembershipApiV1OrganizationsMeMemberGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useGetMyMembershipApiV1OrganizationsMeMemberGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useGetMyMembershipApiV1OrganizationsMeMemberGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary Get My Membership - */ - -export function useGetMyMembershipApiV1OrganizationsMeMemberGet< - TData = Awaited< - ReturnType - >, - TError = unknown, ->( - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getGetMyMembershipApiV1OrganizationsMeMemberGetQueryOptions(options); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * List members for the active organization. - * @summary List Org Members - */ -export type listOrgMembersApiV1OrganizationsMeMembersGetResponse200 = { - data: LimitOffsetPageTypeVarCustomizedOrganizationMemberRead; - status: 200; -}; - -export type listOrgMembersApiV1OrganizationsMeMembersGetResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type listOrgMembersApiV1OrganizationsMeMembersGetResponseSuccess = - listOrgMembersApiV1OrganizationsMeMembersGetResponse200 & { - headers: Headers; - }; -export type listOrgMembersApiV1OrganizationsMeMembersGetResponseError = - listOrgMembersApiV1OrganizationsMeMembersGetResponse422 & { - headers: Headers; - }; - -export type listOrgMembersApiV1OrganizationsMeMembersGetResponse = - | listOrgMembersApiV1OrganizationsMeMembersGetResponseSuccess - | listOrgMembersApiV1OrganizationsMeMembersGetResponseError; - -export const getListOrgMembersApiV1OrganizationsMeMembersGetUrl = ( - params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, -) => { - const normalizedParams = new URLSearchParams(); - - Object.entries(params || {}).forEach(([key, value]) => { - if (value !== undefined) { - normalizedParams.append(key, value === null ? "null" : value.toString()); - } - }); - - const stringifiedParams = normalizedParams.toString(); - - return stringifiedParams.length > 0 - ? `/api/v1/organizations/me/members?${stringifiedParams}` - : `/api/v1/organizations/me/members`; -}; - -export const listOrgMembersApiV1OrganizationsMeMembersGet = async ( - params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, - options?: RequestInit, -): Promise => { - return customFetch( - getListOrgMembersApiV1OrganizationsMeMembersGetUrl(params), - { - ...options, - method: "GET", - }, - ); -}; - -export const getListOrgMembersApiV1OrganizationsMeMembersGetQueryKey = ( - params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, -) => { - return [ - `/api/v1/organizations/me/members`, - ...(params ? [params] : []), - ] as const; -}; - -export const getListOrgMembersApiV1OrganizationsMeMembersGetQueryOptions = < - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getListOrgMembersApiV1OrganizationsMeMembersGetQueryKey(params); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - listOrgMembersApiV1OrganizationsMeMembersGet(params, { - signal, - ...requestOptions, - }); - - return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type ListOrgMembersApiV1OrganizationsMeMembersGetQueryResult = - NonNullable< - Awaited> - >; -export type ListOrgMembersApiV1OrganizationsMeMembersGetQueryError = - HTTPValidationError; - -export function useListOrgMembersApiV1OrganizationsMeMembersGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - params: undefined | ListOrgMembersApiV1OrganizationsMeMembersGetParams, - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useListOrgMembersApiV1OrganizationsMeMembersGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useListOrgMembersApiV1OrganizationsMeMembersGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary List Org Members - */ - -export function useListOrgMembersApiV1OrganizationsMeMembersGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getListOrgMembersApiV1OrganizationsMeMembersGetQueryOptions( - params, - options, - ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * Get a specific organization member by id. - * @summary Get Org Member - */ -export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse200 = { - data: OrganizationMemberRead; - status: 200; -}; - -export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseSuccess = - getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse200 & { - headers: Headers; - }; -export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseError = - getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse422 & { - headers: Headers; - }; - -export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse = - | getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseSuccess - | getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseError; - -export const getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetUrl = ( - memberId: string, -) => { - return `/api/v1/organizations/me/members/${memberId}`; -}; - -export const getOrgMemberApiV1OrganizationsMeMembersMemberIdGet = async ( - memberId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetUrl(memberId), - { - ...options, - method: "GET", - }, - ); -}; - -export const getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryKey = ( - memberId: string, -) => { - return [`/api/v1/organizations/me/members/${memberId}`] as const; -}; - -export const getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryOptions = - < - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, - >( - memberId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType< - typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet - > - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - ) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryKey(memberId); - - const queryFn: QueryFunction< - Awaited< - ReturnType - > - > = ({ signal }) => - getOrgMemberApiV1OrganizationsMeMembersMemberIdGet(memberId, { - signal, - ...requestOptions, - }); - - return { - queryKey, - queryFn, - enabled: !!memberId, - ...queryOptions, - } as UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > & { queryKey: DataTag }; - }; - -export type GetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type GetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryError = - HTTPValidationError; - -export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - memberId: string, - options: { - query: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType< - typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet - > - >, - TError, - Awaited< - ReturnType< - typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet - > - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - memberId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType< - typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet - > - >, - TError, - Awaited< - ReturnType< - typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet - > - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - memberId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary Get Org Member - */ - -export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - memberId: string, - options?: { - query?: Partial< - UseQueryOptions< - Awaited< - ReturnType - >, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryOptions( - memberId, - options, - ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - -/** - * Update a member's role in the organization. - * @summary Update Org Member - */ -export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse200 = - { - data: OrganizationMemberRead; - status: 200; - }; - -export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseSuccess = - updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse200 & { - headers: Headers; - }; -export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseError = - updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse422 & { - headers: Headers; - }; - -export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse = - | updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseSuccess - | updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseError; - -export const getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchUrl = ( - memberId: string, -) => { - return `/api/v1/organizations/me/members/${memberId}`; -}; - -export const updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch = async ( - memberId: string, - organizationMemberUpdate: OrganizationMemberUpdate, - options?: RequestInit, -): Promise => { - return customFetch( - getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchUrl(memberId), - { - ...options, - method: "PATCH", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(organizationMemberUpdate), - }, - ); -}; - -export const getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch - > - >, - TError, - { memberId: string; data: OrganizationMemberUpdate }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType - >, - TError, - { memberId: string; data: OrganizationMemberUpdate }, - TContext - > => { - const mutationKey = [ - "updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType< - typeof updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch - > - >, - { memberId: string; data: OrganizationMemberUpdate } - > = (props) => { - const { memberId, data } = props ?? {}; - - return updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch( - memberId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type UpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationResult = - NonNullable< - Awaited< - ReturnType - > - >; -export type UpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationBody = - OrganizationMemberUpdate; -export type UpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationError = - HTTPValidationError; - -/** - * @summary Update Org Member - */ -export const useUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch - > - >, - TError, - { memberId: string; data: OrganizationMemberUpdate }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { memberId: string; data: OrganizationMemberUpdate }, - TContext -> => { - return useMutation( - getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationOptions( - options, - ), - queryClient, - ); -}; -/** - * Remove a member from the active organization. - * @summary Remove Org Member - */ -export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse200 = - { - data: OkResponse; - status: 200; - }; - -export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseSuccess = - removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse200 & { - headers: Headers; - }; -export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseError = - removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse422 & { - headers: Headers; - }; - -export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse = - | removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseSuccess - | removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseError; - -export const getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteUrl = ( - memberId: string, -) => { - return `/api/v1/organizations/me/members/${memberId}`; -}; - -export const removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete = async ( - memberId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteUrl(memberId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete - > - >, - TError, - { memberId: string }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType< - typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete - > - >, - TError, - { memberId: string }, - TContext - > => { - const mutationKey = [ - "removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType< - typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete - > - >, - { memberId: string } - > = (props) => { - const { memberId } = props ?? {}; - - return removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete( - memberId, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type RemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationResult = - NonNullable< - Awaited< - ReturnType< - typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete - > - > - >; - -export type RemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Remove Org Member - */ -export const useRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete - > - >, - TError, - { memberId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited< - ReturnType - >, - TError, - { memberId: string }, - TContext -> => { - return useMutation( - getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationOptions( - options, - ), - queryClient, - ); -}; -/** - * Update board-level access settings for a member. - * @summary Update Member Access - */ -export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse200 = - { - data: OrganizationMemberRead; - status: 200; - }; - -export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse422 = - { - data: HTTPValidationError; - status: 422; - }; - -export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseSuccess = - updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse200 & { - headers: Headers; - }; -export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseError = - updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse422 & { - headers: Headers; - }; - -export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse = - - | updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseSuccess - | updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseError; - -export const getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutUrl = - (memberId: string) => { - return `/api/v1/organizations/me/members/${memberId}/access`; - }; - -export const updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut = - async ( - memberId: string, - organizationMemberAccessUpdate: OrganizationMemberAccessUpdate, - options?: RequestInit, - ): Promise => { - return customFetch( - getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutUrl( - memberId, - ), - { - ...options, - method: "PUT", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(organizationMemberAccessUpdate), - }, - ); - }; - -export const getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationOptions = - (options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut - > - >, - TError, - { memberId: string; data: OrganizationMemberAccessUpdate }, - TContext - >; - request?: SecondParameter; - }): UseMutationOptions< - Awaited< - ReturnType< - typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut - > - >, - TError, - { memberId: string; data: OrganizationMemberAccessUpdate }, - TContext - > => { - const mutationKey = [ - "updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut", - ]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited< - ReturnType< - typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut - > - >, - { memberId: string; data: OrganizationMemberAccessUpdate } - > = (props) => { - const { memberId, data } = props ?? {}; - - return updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut( - memberId, - data, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; - }; - -export type UpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationResult = - NonNullable< - Awaited< - ReturnType< - typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut - > - > - >; -export type UpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationBody = - OrganizationMemberAccessUpdate; -export type UpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationError = - HTTPValidationError; - -/** - * @summary Update Member Access - */ -export const useUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut = - ( - options?: { - mutation?: UseMutationOptions< - Awaited< - ReturnType< - typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut - > - >, - TError, - { memberId: string; data: OrganizationMemberAccessUpdate }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, - ): UseMutationResult< - Awaited< - ReturnType< - typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut - > - >, - TError, - { memberId: string; data: OrganizationMemberAccessUpdate }, - TContext - > => { - return useMutation( - getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationOptions( - options, - ), - queryClient, - ); - }; /** * List pending invites for the active organization. * @summary List Org Invites @@ -2457,71 +1223,737 @@ export const useRevokeOrgInviteApiV1OrganizationsMeInvitesInviteIdDelete = < ); }; /** - * Accept an invite and return resulting membership. - * @summary Accept Org Invite + * List organizations where the current user is a member. + * @summary List My Organizations */ -export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse200 = { - data: OrganizationMemberRead; +export type listMyOrganizationsApiV1OrganizationsMeListGetResponse200 = { + data: OrganizationListItem[]; status: 200; }; -export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseSuccess = - acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse200 & { - headers: Headers; - }; -export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseError = - acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse422 & { +export type listMyOrganizationsApiV1OrganizationsMeListGetResponseSuccess = + listMyOrganizationsApiV1OrganizationsMeListGetResponse200 & { headers: Headers; }; +export type listMyOrganizationsApiV1OrganizationsMeListGetResponse = + listMyOrganizationsApiV1OrganizationsMeListGetResponseSuccess; -export type acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponse = - | acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseSuccess - | acceptOrgInviteApiV1OrganizationsInvitesAcceptPostResponseError; - -export const getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostUrl = () => { - return `/api/v1/organizations/invites/accept`; +export const getListMyOrganizationsApiV1OrganizationsMeListGetUrl = () => { + return `/api/v1/organizations/me/list`; }; -export const acceptOrgInviteApiV1OrganizationsInvitesAcceptPost = async ( - organizationInviteAccept: OrganizationInviteAccept, +export const listMyOrganizationsApiV1OrganizationsMeListGet = async ( options?: RequestInit, -): Promise => { - return customFetch( - getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostUrl(), +): Promise => { + return customFetch( + getListMyOrganizationsApiV1OrganizationsMeListGetUrl(), { ...options, - method: "POST", - headers: { "Content-Type": "application/json", ...options?.headers }, - body: JSON.stringify(organizationInviteAccept), + method: "GET", }, ); }; -export const getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationOptions = +export const getListMyOrganizationsApiV1OrganizationsMeListGetQueryKey = () => { + return [`/api/v1/organizations/me/list`] as const; +}; + +export const getListMyOrganizationsApiV1OrganizationsMeListGetQueryOptions = < + TData = Awaited< + ReturnType + >, + TError = unknown, +>(options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; +}) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getListMyOrganizationsApiV1OrganizationsMeListGetQueryKey(); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + listMyOrganizationsApiV1OrganizationsMeListGet({ + signal, + ...requestOptions, + }); + + return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type ListMyOrganizationsApiV1OrganizationsMeListGetQueryResult = + NonNullable< + Awaited> + >; +export type ListMyOrganizationsApiV1OrganizationsMeListGetQueryError = unknown; + +export function useListMyOrganizationsApiV1OrganizationsMeListGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options: { + query: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useListMyOrganizationsApiV1OrganizationsMeListGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useListMyOrganizationsApiV1OrganizationsMeListGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary List My Organizations + */ + +export function useListMyOrganizationsApiV1OrganizationsMeListGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getListMyOrganizationsApiV1OrganizationsMeListGetQueryOptions(options); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Get the caller's membership record in the active organization. + * @summary Get My Membership + */ +export type getMyMembershipApiV1OrganizationsMeMemberGetResponse200 = { + data: OrganizationMemberRead; + status: 200; +}; + +export type getMyMembershipApiV1OrganizationsMeMemberGetResponseSuccess = + getMyMembershipApiV1OrganizationsMeMemberGetResponse200 & { + headers: Headers; + }; +export type getMyMembershipApiV1OrganizationsMeMemberGetResponse = + getMyMembershipApiV1OrganizationsMeMemberGetResponseSuccess; + +export const getGetMyMembershipApiV1OrganizationsMeMemberGetUrl = () => { + return `/api/v1/organizations/me/member`; +}; + +export const getMyMembershipApiV1OrganizationsMeMemberGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getGetMyMembershipApiV1OrganizationsMeMemberGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +export const getGetMyMembershipApiV1OrganizationsMeMemberGetQueryKey = () => { + return [`/api/v1/organizations/me/member`] as const; +}; + +export const getGetMyMembershipApiV1OrganizationsMeMemberGetQueryOptions = < + TData = Awaited< + ReturnType + >, + TError = unknown, +>(options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; +}) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getGetMyMembershipApiV1OrganizationsMeMemberGetQueryKey(); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + getMyMembershipApiV1OrganizationsMeMemberGet({ signal, ...requestOptions }); + + return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type GetMyMembershipApiV1OrganizationsMeMemberGetQueryResult = + NonNullable< + Awaited> + >; +export type GetMyMembershipApiV1OrganizationsMeMemberGetQueryError = unknown; + +export function useGetMyMembershipApiV1OrganizationsMeMemberGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options: { + query: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useGetMyMembershipApiV1OrganizationsMeMemberGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useGetMyMembershipApiV1OrganizationsMeMemberGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary Get My Membership + */ + +export function useGetMyMembershipApiV1OrganizationsMeMemberGet< + TData = Awaited< + ReturnType + >, + TError = unknown, +>( + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getGetMyMembershipApiV1OrganizationsMeMemberGetQueryOptions(options); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * List members for the active organization. + * @summary List Org Members + */ +export type listOrgMembersApiV1OrganizationsMeMembersGetResponse200 = { + data: LimitOffsetPageTypeVarCustomizedOrganizationMemberRead; + status: 200; +}; + +export type listOrgMembersApiV1OrganizationsMeMembersGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type listOrgMembersApiV1OrganizationsMeMembersGetResponseSuccess = + listOrgMembersApiV1OrganizationsMeMembersGetResponse200 & { + headers: Headers; + }; +export type listOrgMembersApiV1OrganizationsMeMembersGetResponseError = + listOrgMembersApiV1OrganizationsMeMembersGetResponse422 & { + headers: Headers; + }; + +export type listOrgMembersApiV1OrganizationsMeMembersGetResponse = + | listOrgMembersApiV1OrganizationsMeMembersGetResponseSuccess + | listOrgMembersApiV1OrganizationsMeMembersGetResponseError; + +export const getListOrgMembersApiV1OrganizationsMeMembersGetUrl = ( + params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, +) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 + ? `/api/v1/organizations/me/members?${stringifiedParams}` + : `/api/v1/organizations/me/members`; +}; + +export const listOrgMembersApiV1OrganizationsMeMembersGet = async ( + params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, + options?: RequestInit, +): Promise => { + return customFetch( + getListOrgMembersApiV1OrganizationsMeMembersGetUrl(params), + { + ...options, + method: "GET", + }, + ); +}; + +export const getListOrgMembersApiV1OrganizationsMeMembersGetQueryKey = ( + params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, +) => { + return [ + `/api/v1/organizations/me/members`, + ...(params ? [params] : []), + ] as const; +}; + +export const getListOrgMembersApiV1OrganizationsMeMembersGetQueryOptions = < + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, +) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getListOrgMembersApiV1OrganizationsMeMembersGetQueryKey(params); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + listOrgMembersApiV1OrganizationsMeMembersGet(params, { + signal, + ...requestOptions, + }); + + return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type ListOrgMembersApiV1OrganizationsMeMembersGetQueryResult = + NonNullable< + Awaited> + >; +export type ListOrgMembersApiV1OrganizationsMeMembersGetQueryError = + HTTPValidationError; + +export function useListOrgMembersApiV1OrganizationsMeMembersGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + params: undefined | ListOrgMembersApiV1OrganizationsMeMembersGetParams, + options: { + query: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useListOrgMembersApiV1OrganizationsMeMembersGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useListOrgMembersApiV1OrganizationsMeMembersGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary List Org Members + */ + +export function useListOrgMembersApiV1OrganizationsMeMembersGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + params?: ListOrgMembersApiV1OrganizationsMeMembersGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getListOrgMembersApiV1OrganizationsMeMembersGetQueryOptions( + params, + options, + ); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Remove a member from the active organization. + * @summary Remove Org Member + */ +export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse200 = + { + data: OkResponse; + status: 200; + }; + +export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse422 = + { + data: HTTPValidationError; + status: 422; + }; + +export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseSuccess = + removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse200 & { + headers: Headers; + }; +export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseError = + removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse422 & { + headers: Headers; + }; + +export type removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponse = + | removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseSuccess + | removeOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteResponseError; + +export const getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteUrl = ( + memberId: string, +) => { + return `/api/v1/organizations/me/members/${memberId}`; +}; + +export const removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete = async ( + memberId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteUrl(memberId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationOptions = (options?: { mutation?: UseMutationOptions< Awaited< - ReturnType + ReturnType< + typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete + > >, TError, - { data: OrganizationInviteAccept }, + { memberId: string }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited< - ReturnType + ReturnType< + typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete + > >, TError, - { data: OrganizationInviteAccept }, + { memberId: string }, TContext > => { - const mutationKey = ["acceptOrgInviteApiV1OrganizationsInvitesAcceptPost"]; + const mutationKey = [ + "removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete", + ]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && @@ -2532,13 +1964,422 @@ export const getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationOption const mutationFn: MutationFunction< Awaited< - ReturnType + ReturnType< + typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete + > >, - { data: OrganizationInviteAccept } + { memberId: string } > = (props) => { - const { data } = props ?? {}; + const { memberId } = props ?? {}; - return acceptOrgInviteApiV1OrganizationsInvitesAcceptPost( + return removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete( + memberId, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type RemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationResult = + NonNullable< + Awaited< + ReturnType< + typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete + > + > + >; + +export type RemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Remove Org Member + */ +export const useRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof removeOrgMemberApiV1OrganizationsMeMembersMemberIdDelete + > + >, + TError, + { memberId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited< + ReturnType + >, + TError, + { memberId: string }, + TContext +> => { + return useMutation( + getRemoveOrgMemberApiV1OrganizationsMeMembersMemberIdDeleteMutationOptions( + options, + ), + queryClient, + ); +}; +/** + * Get a specific organization member by id. + * @summary Get Org Member + */ +export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse200 = { + data: OrganizationMemberRead; + status: 200; +}; + +export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseSuccess = + getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse200 & { + headers: Headers; + }; +export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseError = + getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse422 & { + headers: Headers; + }; + +export type getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponse = + | getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseSuccess + | getOrgMemberApiV1OrganizationsMeMembersMemberIdGetResponseError; + +export const getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetUrl = ( + memberId: string, +) => { + return `/api/v1/organizations/me/members/${memberId}`; +}; + +export const getOrgMemberApiV1OrganizationsMeMembersMemberIdGet = async ( + memberId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetUrl(memberId), + { + ...options, + method: "GET", + }, + ); +}; + +export const getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryKey = ( + memberId: string, +) => { + return [`/api/v1/organizations/me/members/${memberId}`] as const; +}; + +export const getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryOptions = + < + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, + >( + memberId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType< + typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet + > + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + ) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryKey(memberId); + + const queryFn: QueryFunction< + Awaited< + ReturnType + > + > = ({ signal }) => + getOrgMemberApiV1OrganizationsMeMembersMemberIdGet(memberId, { + signal, + ...requestOptions, + }); + + return { + queryKey, + queryFn, + enabled: !!memberId, + ...queryOptions, + } as UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > & { queryKey: DataTag }; + }; + +export type GetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryResult = + NonNullable< + Awaited< + ReturnType + > + >; +export type GetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryError = + HTTPValidationError; + +export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + memberId: string, + options: { + query: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType< + typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet + > + >, + TError, + Awaited< + ReturnType< + typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet + > + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + memberId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType< + typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet + > + >, + TError, + Awaited< + ReturnType< + typeof getOrgMemberApiV1OrganizationsMeMembersMemberIdGet + > + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + memberId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary Get Org Member + */ + +export function useGetOrgMemberApiV1OrganizationsMeMembersMemberIdGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + memberId: string, + options?: { + query?: Partial< + UseQueryOptions< + Awaited< + ReturnType + >, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getGetOrgMemberApiV1OrganizationsMeMembersMemberIdGetQueryOptions( + memberId, + options, + ); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Update a member's role in the organization. + * @summary Update Org Member + */ +export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse200 = + { + data: OrganizationMemberRead; + status: 200; + }; + +export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse422 = + { + data: HTTPValidationError; + status: 422; + }; + +export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseSuccess = + updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse200 & { + headers: Headers; + }; +export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseError = + updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse422 & { + headers: Headers; + }; + +export type updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponse = + | updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseSuccess + | updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchResponseError; + +export const getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchUrl = ( + memberId: string, +) => { + return `/api/v1/organizations/me/members/${memberId}`; +}; + +export const updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch = async ( + memberId: string, + organizationMemberUpdate: OrganizationMemberUpdate, + options?: RequestInit, +): Promise => { + return customFetch( + getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchUrl(memberId), + { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(organizationMemberUpdate), + }, + ); +}; + +export const getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch + > + >, + TError, + { memberId: string; data: OrganizationMemberUpdate }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType + >, + TError, + { memberId: string; data: OrganizationMemberUpdate }, + TContext + > => { + const mutationKey = [ + "updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType< + typeof updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch + > + >, + { memberId: string; data: OrganizationMemberUpdate } + > = (props) => { + const { memberId, data } = props ?? {}; + + return updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch( + memberId, data, requestOptions, ); @@ -2547,31 +2388,33 @@ export const getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationOption return { mutationFn, ...mutationOptions }; }; -export type AcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationResult = +export type UpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationResult = NonNullable< Awaited< - ReturnType + ReturnType > >; -export type AcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationBody = - OrganizationInviteAccept; -export type AcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationError = +export type UpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationBody = + OrganizationMemberUpdate; +export type UpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationError = HTTPValidationError; /** - * @summary Accept Org Invite + * @summary Update Org Member */ -export const useAcceptOrgInviteApiV1OrganizationsInvitesAcceptPost = < +export const useUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch = < TError = HTTPValidationError, TContext = unknown, >( options?: { mutation?: UseMutationOptions< Awaited< - ReturnType + ReturnType< + typeof updateOrgMemberApiV1OrganizationsMeMembersMemberIdPatch + > >, TError, - { data: OrganizationInviteAccept }, + { memberId: string; data: OrganizationMemberUpdate }, TContext >; request?: SecondParameter; @@ -2579,16 +2422,173 @@ export const useAcceptOrgInviteApiV1OrganizationsInvitesAcceptPost = < queryClient?: QueryClient, ): UseMutationResult< Awaited< - ReturnType + ReturnType >, TError, - { data: OrganizationInviteAccept }, + { memberId: string; data: OrganizationMemberUpdate }, TContext > => { return useMutation( - getAcceptOrgInviteApiV1OrganizationsInvitesAcceptPostMutationOptions( + getUpdateOrgMemberApiV1OrganizationsMeMembersMemberIdPatchMutationOptions( options, ), queryClient, ); }; +/** + * Update board-level access settings for a member. + * @summary Update Member Access + */ +export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse200 = + { + data: OrganizationMemberRead; + status: 200; + }; + +export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse422 = + { + data: HTTPValidationError; + status: 422; + }; + +export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseSuccess = + updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse200 & { + headers: Headers; + }; +export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseError = + updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse422 & { + headers: Headers; + }; + +export type updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponse = + + | updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseSuccess + | updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutResponseError; + +export const getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutUrl = + (memberId: string) => { + return `/api/v1/organizations/me/members/${memberId}/access`; + }; + +export const updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut = + async ( + memberId: string, + organizationMemberAccessUpdate: OrganizationMemberAccessUpdate, + options?: RequestInit, + ): Promise => { + return customFetch( + getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutUrl( + memberId, + ), + { + ...options, + method: "PUT", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(organizationMemberAccessUpdate), + }, + ); + }; + +export const getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationOptions = + (options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut + > + >, + TError, + { memberId: string; data: OrganizationMemberAccessUpdate }, + TContext + >; + request?: SecondParameter; + }): UseMutationOptions< + Awaited< + ReturnType< + typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut + > + >, + TError, + { memberId: string; data: OrganizationMemberAccessUpdate }, + TContext + > => { + const mutationKey = [ + "updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut", + ]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited< + ReturnType< + typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut + > + >, + { memberId: string; data: OrganizationMemberAccessUpdate } + > = (props) => { + const { memberId, data } = props ?? {}; + + return updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut( + memberId, + data, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; + }; + +export type UpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationResult = + NonNullable< + Awaited< + ReturnType< + typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut + > + > + >; +export type UpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationBody = + OrganizationMemberAccessUpdate; +export type UpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationError = + HTTPValidationError; + +/** + * @summary Update Member Access + */ +export const useUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut = + ( + options?: { + mutation?: UseMutationOptions< + Awaited< + ReturnType< + typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut + > + >, + TError, + { memberId: string; data: OrganizationMemberAccessUpdate }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, + ): UseMutationResult< + Awaited< + ReturnType< + typeof updateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPut + > + >, + TError, + { memberId: string; data: OrganizationMemberAccessUpdate }, + TContext + > => { + return useMutation( + getUpdateMemberAccessApiV1OrganizationsMeMembersMemberIdAccessPutMutationOptions( + options, + ), + queryClient, + ); + }; diff --git a/frontend/src/api/generated/skills/skills.ts b/frontend/src/api/generated/skills/skills.ts index af142e6f..1e34e5ed 100644 --- a/frontend/src/api/generated/skills/skills.ts +++ b/frontend/src/api/generated/skills/skills.ts @@ -1233,6 +1233,126 @@ export const useCreateSkillPackApiV1SkillsPacksPost = < queryClient, ); }; +/** + * Delete one pack source from the organization. + * @summary Delete Skill Pack + */ +export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseSuccess = + deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseError = + deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse = + | deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseSuccess + | deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseError; + +export const getDeleteSkillPackApiV1SkillsPacksPackIdDeleteUrl = ( + packId: string, +) => { + return `/api/v1/skills/packs/${packId}`; +}; + +export const deleteSkillPackApiV1SkillsPacksPackIdDelete = async ( + packId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteSkillPackApiV1SkillsPacksPackIdDeleteUrl(packId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { packId: string }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { packId: string }, + TContext +> => { + const mutationKey = ["deleteSkillPackApiV1SkillsPacksPackIdDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { packId: string } + > = (props) => { + const { packId } = props ?? {}; + + return deleteSkillPackApiV1SkillsPacksPackIdDelete(packId, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type DeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationResult = + NonNullable< + Awaited> + >; + +export type DeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Delete Skill Pack + */ +export const useDeleteSkillPackApiV1SkillsPacksPackIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { packId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { packId: string }, + TContext +> => { + return useMutation( + getDeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationOptions(options), + queryClient, + ); +}; /** * Get one skill pack by ID. * @summary Get Skill Pack @@ -1568,126 +1688,6 @@ export const useUpdateSkillPackApiV1SkillsPacksPackIdPatch = < queryClient, ); }; -/** - * Delete one pack source from the organization. - * @summary Delete Skill Pack - */ -export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseSuccess = - deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseError = - deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteSkillPackApiV1SkillsPacksPackIdDeleteResponse = - | deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseSuccess - | deleteSkillPackApiV1SkillsPacksPackIdDeleteResponseError; - -export const getDeleteSkillPackApiV1SkillsPacksPackIdDeleteUrl = ( - packId: string, -) => { - return `/api/v1/skills/packs/${packId}`; -}; - -export const deleteSkillPackApiV1SkillsPacksPackIdDelete = async ( - packId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteSkillPackApiV1SkillsPacksPackIdDeleteUrl(packId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { packId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { packId: string }, - TContext -> => { - const mutationKey = ["deleteSkillPackApiV1SkillsPacksPackIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { packId: string } - > = (props) => { - const { packId } = props ?? {}; - - return deleteSkillPackApiV1SkillsPacksPackIdDelete(packId, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type DeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationResult = - NonNullable< - Awaited> - >; - -export type DeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete Skill Pack - */ -export const useDeleteSkillPackApiV1SkillsPacksPackIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { packId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { packId: string }, - TContext -> => { - return useMutation( - getDeleteSkillPackApiV1SkillsPacksPackIdDeleteMutationOptions(options), - queryClient, - ); -}; /** * Clone a pack repository and upsert discovered skills from `skills/**\/SKILL.md`. * @summary Sync Skill Pack diff --git a/frontend/src/api/generated/tags/tags.ts b/frontend/src/api/generated/tags/tags.ts index 4f2e2a8c..36278bd7 100644 --- a/frontend/src/api/generated/tags/tags.ts +++ b/frontend/src/api/generated/tags/tags.ts @@ -360,6 +360,122 @@ export const useCreateTagApiV1TagsPost = < queryClient, ); }; +/** + * Delete a tag and remove all associated tag links. + * @summary Delete Tag + */ +export type deleteTagApiV1TagsTagIdDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteTagApiV1TagsTagIdDeleteResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type deleteTagApiV1TagsTagIdDeleteResponseSuccess = + deleteTagApiV1TagsTagIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteTagApiV1TagsTagIdDeleteResponseError = + deleteTagApiV1TagsTagIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteTagApiV1TagsTagIdDeleteResponse = + | deleteTagApiV1TagsTagIdDeleteResponseSuccess + | deleteTagApiV1TagsTagIdDeleteResponseError; + +export const getDeleteTagApiV1TagsTagIdDeleteUrl = (tagId: string) => { + return `/api/v1/tags/${tagId}`; +}; + +export const deleteTagApiV1TagsTagIdDelete = async ( + tagId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteTagApiV1TagsTagIdDeleteUrl(tagId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteTagApiV1TagsTagIdDeleteMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { tagId: string }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { tagId: string }, + TContext +> => { + const mutationKey = ["deleteTagApiV1TagsTagIdDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { tagId: string } + > = (props) => { + const { tagId } = props ?? {}; + + return deleteTagApiV1TagsTagIdDelete(tagId, requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type DeleteTagApiV1TagsTagIdDeleteMutationResult = NonNullable< + Awaited> +>; + +export type DeleteTagApiV1TagsTagIdDeleteMutationError = HTTPValidationError; + +/** + * @summary Delete Tag + */ +export const useDeleteTagApiV1TagsTagIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { tagId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { tagId: string }, + TContext +> => { + return useMutation( + getDeleteTagApiV1TagsTagIdDeleteMutationOptions(options), + queryClient, + ); +}; /** * Get a single tag in the active organization. * @summary Get Tag @@ -676,119 +792,3 @@ export const useUpdateTagApiV1TagsTagIdPatch = < queryClient, ); }; -/** - * Delete a tag and remove all associated tag links. - * @summary Delete Tag - */ -export type deleteTagApiV1TagsTagIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteTagApiV1TagsTagIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type deleteTagApiV1TagsTagIdDeleteResponseSuccess = - deleteTagApiV1TagsTagIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteTagApiV1TagsTagIdDeleteResponseError = - deleteTagApiV1TagsTagIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteTagApiV1TagsTagIdDeleteResponse = - | deleteTagApiV1TagsTagIdDeleteResponseSuccess - | deleteTagApiV1TagsTagIdDeleteResponseError; - -export const getDeleteTagApiV1TagsTagIdDeleteUrl = (tagId: string) => { - return `/api/v1/tags/${tagId}`; -}; - -export const deleteTagApiV1TagsTagIdDelete = async ( - tagId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteTagApiV1TagsTagIdDeleteUrl(tagId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteTagApiV1TagsTagIdDeleteMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { tagId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { tagId: string }, - TContext -> => { - const mutationKey = ["deleteTagApiV1TagsTagIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { tagId: string } - > = (props) => { - const { tagId } = props ?? {}; - - return deleteTagApiV1TagsTagIdDelete(tagId, requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type DeleteTagApiV1TagsTagIdDeleteMutationResult = NonNullable< - Awaited> ->; - -export type DeleteTagApiV1TagsTagIdDeleteMutationError = HTTPValidationError; - -/** - * @summary Delete Tag - */ -export const useDeleteTagApiV1TagsTagIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { tagId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { tagId: string }, - TContext -> => { - return useMutation( - getDeleteTagApiV1TagsTagIdDeleteMutationOptions(options), - queryClient, - ); -}; diff --git a/frontend/src/api/generated/tasks/tasks.ts b/frontend/src/api/generated/tasks/tasks.ts index 1c246410..cf1f6ac2 100644 --- a/frontend/src/api/generated/tasks/tasks.ts +++ b/frontend/src/api/generated/tasks/tasks.ts @@ -40,259 +40,6 @@ import { customFetch } from "../../mutator"; type SecondParameter unknown> = Parameters[1]; -/** - * Stream task and task-comment events as SSE payloads. - * @summary Stream Tasks - */ -export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponse200 = { - data: unknown; - status: 200; -}; - -export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponseSuccess = - streamTasksApiV1BoardsBoardIdTasksStreamGetResponse200 & { - headers: Headers; - }; -export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponseError = - streamTasksApiV1BoardsBoardIdTasksStreamGetResponse422 & { - headers: Headers; - }; - -export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponse = - | streamTasksApiV1BoardsBoardIdTasksStreamGetResponseSuccess - | streamTasksApiV1BoardsBoardIdTasksStreamGetResponseError; - -export const getStreamTasksApiV1BoardsBoardIdTasksStreamGetUrl = ( - boardId: string, - params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, -) => { - const normalizedParams = new URLSearchParams(); - - Object.entries(params || {}).forEach(([key, value]) => { - if (value !== undefined) { - normalizedParams.append(key, value === null ? "null" : value.toString()); - } - }); - - const stringifiedParams = normalizedParams.toString(); - - return stringifiedParams.length > 0 - ? `/api/v1/boards/${boardId}/tasks/stream?${stringifiedParams}` - : `/api/v1/boards/${boardId}/tasks/stream`; -}; - -export const streamTasksApiV1BoardsBoardIdTasksStreamGet = async ( - boardId: string, - params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, - options?: RequestInit, -): Promise => { - return customFetch( - getStreamTasksApiV1BoardsBoardIdTasksStreamGetUrl(boardId, params), - { - ...options, - method: "GET", - }, - ); -}; - -export const getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryKey = ( - boardId: string, - params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, -) => { - return [ - `/api/v1/boards/${boardId}/tasks/stream`, - ...(params ? [params] : []), - ] as const; -}; - -export const getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryOptions = < - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; - }, -) => { - const { query: queryOptions, request: requestOptions } = options ?? {}; - - const queryKey = - queryOptions?.queryKey ?? - getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryKey(boardId, params); - - const queryFn: QueryFunction< - Awaited> - > = ({ signal }) => - streamTasksApiV1BoardsBoardIdTasksStreamGet(boardId, params, { - signal, - ...requestOptions, - }); - - return { - queryKey, - queryFn, - enabled: !!boardId, - ...queryOptions, - } as UseQueryOptions< - Awaited>, - TError, - TData - > & { queryKey: DataTag }; -}; - -export type StreamTasksApiV1BoardsBoardIdTasksStreamGetQueryResult = - NonNullable< - Awaited> - >; -export type StreamTasksApiV1BoardsBoardIdTasksStreamGetQueryError = - HTTPValidationError; - -export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params: undefined | StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, - options: { - query: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - > & - Pick< - DefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): DefinedUseQueryResult & { - queryKey: DataTag; -}; -export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - > & - Pick< - UndefinedInitialDataOptions< - Awaited< - ReturnType - >, - TError, - Awaited< - ReturnType - > - >, - "initialData" - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -}; -/** - * @summary Stream Tasks - */ - -export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< - TData = Awaited< - ReturnType - >, - TError = HTTPValidationError, ->( - boardId: string, - params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, - options?: { - query?: Partial< - UseQueryOptions< - Awaited>, - TError, - TData - > - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseQueryResult & { - queryKey: DataTag; -} { - const queryOptions = - getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryOptions( - boardId, - params, - options, - ); - - const query = useQuery(queryOptions, queryClient) as UseQueryResult< - TData, - TError - > & { queryKey: DataTag }; - - return { ...query, queryKey: queryOptions.queryKey }; -} - /** * List board tasks with optional status and assignment filters. * @summary List Tasks @@ -655,6 +402,385 @@ export const useCreateTaskApiV1BoardsBoardIdTasksPost = < queryClient, ); }; +/** + * Stream task and task-comment events as SSE payloads. + * @summary Stream Tasks + */ +export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponse200 = { + data: unknown; + status: 200; +}; + +export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponseSuccess = + streamTasksApiV1BoardsBoardIdTasksStreamGetResponse200 & { + headers: Headers; + }; +export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponseError = + streamTasksApiV1BoardsBoardIdTasksStreamGetResponse422 & { + headers: Headers; + }; + +export type streamTasksApiV1BoardsBoardIdTasksStreamGetResponse = + | streamTasksApiV1BoardsBoardIdTasksStreamGetResponseSuccess + | streamTasksApiV1BoardsBoardIdTasksStreamGetResponseError; + +export const getStreamTasksApiV1BoardsBoardIdTasksStreamGetUrl = ( + boardId: string, + params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, +) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 + ? `/api/v1/boards/${boardId}/tasks/stream?${stringifiedParams}` + : `/api/v1/boards/${boardId}/tasks/stream`; +}; + +export const streamTasksApiV1BoardsBoardIdTasksStreamGet = async ( + boardId: string, + params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, + options?: RequestInit, +): Promise => { + return customFetch( + getStreamTasksApiV1BoardsBoardIdTasksStreamGetUrl(boardId, params), + { + ...options, + method: "GET", + }, + ); +}; + +export const getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryKey = ( + boardId: string, + params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, +) => { + return [ + `/api/v1/boards/${boardId}/tasks/stream`, + ...(params ? [params] : []), + ] as const; +}; + +export const getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryOptions = < + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, +) => { + const { query: queryOptions, request: requestOptions } = options ?? {}; + + const queryKey = + queryOptions?.queryKey ?? + getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryKey(boardId, params); + + const queryFn: QueryFunction< + Awaited> + > = ({ signal }) => + streamTasksApiV1BoardsBoardIdTasksStreamGet(boardId, params, { + signal, + ...requestOptions, + }); + + return { + queryKey, + queryFn, + enabled: !!boardId, + ...queryOptions, + } as UseQueryOptions< + Awaited>, + TError, + TData + > & { queryKey: DataTag }; +}; + +export type StreamTasksApiV1BoardsBoardIdTasksStreamGetQueryResult = + NonNullable< + Awaited> + >; +export type StreamTasksApiV1BoardsBoardIdTasksStreamGetQueryError = + HTTPValidationError; + +export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params: undefined | StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, + options: { + query: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + DefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): DefinedUseQueryResult & { + queryKey: DataTag; +}; +export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + > & + Pick< + UndefinedInitialDataOptions< + Awaited< + ReturnType + >, + TError, + Awaited< + ReturnType + > + >, + "initialData" + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +}; +/** + * @summary Stream Tasks + */ + +export function useStreamTasksApiV1BoardsBoardIdTasksStreamGet< + TData = Awaited< + ReturnType + >, + TError = HTTPValidationError, +>( + boardId: string, + params?: StreamTasksApiV1BoardsBoardIdTasksStreamGetParams, + options?: { + query?: Partial< + UseQueryOptions< + Awaited>, + TError, + TData + > + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseQueryResult & { + queryKey: DataTag; +} { + const queryOptions = + getStreamTasksApiV1BoardsBoardIdTasksStreamGetQueryOptions( + boardId, + params, + options, + ); + + const query = useQuery(queryOptions, queryClient) as UseQueryResult< + TData, + TError + > & { queryKey: DataTag }; + + return { ...query, queryKey: queryOptions.queryKey }; +} + +/** + * Delete a task and related records. + * @summary Delete Task + */ +export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseSuccess = + deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseError = + deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse = + | deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseSuccess + | deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseError; + +export const getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteUrl = ( + boardId: string, + taskId: string, +) => { + return `/api/v1/boards/${boardId}/tasks/${taskId}`; +}; + +export const deleteTaskApiV1BoardsBoardIdTasksTaskIdDelete = async ( + boardId: string, + taskId: string, + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteUrl(boardId, taskId), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationOptions = < + TError = HTTPValidationError, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; taskId: string }, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + { boardId: string; taskId: string }, + TContext +> => { + const mutationKey = ["deleteTaskApiV1BoardsBoardIdTasksTaskIdDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + { boardId: string; taskId: string } + > = (props) => { + const { boardId, taskId } = props ?? {}; + + return deleteTaskApiV1BoardsBoardIdTasksTaskIdDelete( + boardId, + taskId, + requestOptions, + ); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type DeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationResult = + NonNullable< + Awaited> + >; + +export type DeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationError = + HTTPValidationError; + +/** + * @summary Delete Task + */ +export const useDeleteTaskApiV1BoardsBoardIdTasksTaskIdDelete = < + TError = HTTPValidationError, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + { boardId: string; taskId: string }, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + { boardId: string; taskId: string }, + TContext +> => { + return useMutation( + getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationOptions(options), + queryClient, + ); +}; /** * Update task status, assignment, comment, and dependency state. * @summary Update Task @@ -794,132 +920,6 @@ export const useUpdateTaskApiV1BoardsBoardIdTasksTaskIdPatch = < queryClient, ); }; -/** - * Delete a task and related records. - * @summary Delete Task - */ -export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse422 = { - data: HTTPValidationError; - status: 422; -}; - -export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseSuccess = - deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse200 & { - headers: Headers; - }; -export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseError = - deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse422 & { - headers: Headers; - }; - -export type deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponse = - | deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseSuccess - | deleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteResponseError; - -export const getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteUrl = ( - boardId: string, - taskId: string, -) => { - return `/api/v1/boards/${boardId}/tasks/${taskId}`; -}; - -export const deleteTaskApiV1BoardsBoardIdTasksTaskIdDelete = async ( - boardId: string, - taskId: string, - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteUrl(boardId, taskId), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationOptions = < - TError = HTTPValidationError, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; taskId: string }, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - { boardId: string; taskId: string }, - TContext -> => { - const mutationKey = ["deleteTaskApiV1BoardsBoardIdTasksTaskIdDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - { boardId: string; taskId: string } - > = (props) => { - const { boardId, taskId } = props ?? {}; - - return deleteTaskApiV1BoardsBoardIdTasksTaskIdDelete( - boardId, - taskId, - requestOptions, - ); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type DeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationResult = - NonNullable< - Awaited> - >; - -export type DeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationError = - HTTPValidationError; - -/** - * @summary Delete Task - */ -export const useDeleteTaskApiV1BoardsBoardIdTasksTaskIdDelete = < - TError = HTTPValidationError, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - { boardId: string; taskId: string }, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - { boardId: string; taskId: string }, - TContext -> => { - return useMutation( - getDeleteTaskApiV1BoardsBoardIdTasksTaskIdDeleteMutationOptions(options), - queryClient, - ); -}; /** * List comments for a task in chronological order. * @summary List Task Comments diff --git a/frontend/src/api/generated/users/users.ts b/frontend/src/api/generated/users/users.ts index 825fc351..31c86e07 100644 --- a/frontend/src/api/generated/users/users.ts +++ b/frontend/src/api/generated/users/users.ts @@ -31,6 +31,108 @@ import { customFetch } from "../../mutator"; type SecondParameter unknown> = Parameters[1]; +/** + * Delete the authenticated account and any personal-only organizations. + * @summary Delete Me + */ +export type deleteMeApiV1UsersMeDeleteResponse200 = { + data: OkResponse; + status: 200; +}; + +export type deleteMeApiV1UsersMeDeleteResponseSuccess = + deleteMeApiV1UsersMeDeleteResponse200 & { + headers: Headers; + }; +export type deleteMeApiV1UsersMeDeleteResponse = + deleteMeApiV1UsersMeDeleteResponseSuccess; + +export const getDeleteMeApiV1UsersMeDeleteUrl = () => { + return `/api/v1/users/me`; +}; + +export const deleteMeApiV1UsersMeDelete = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteMeApiV1UsersMeDeleteUrl(), + { + ...options, + method: "DELETE", + }, + ); +}; + +export const getDeleteMeApiV1UsersMeDeleteMutationOptions = < + TError = unknown, + TContext = unknown, +>(options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + void, + TContext + >; + request?: SecondParameter; +}): UseMutationOptions< + Awaited>, + TError, + void, + TContext +> => { + const mutationKey = ["deleteMeApiV1UsersMeDelete"]; + const { mutation: mutationOptions, request: requestOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey }, request: undefined }; + + const mutationFn: MutationFunction< + Awaited>, + void + > = () => { + return deleteMeApiV1UsersMeDelete(requestOptions); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type DeleteMeApiV1UsersMeDeleteMutationResult = NonNullable< + Awaited> +>; + +export type DeleteMeApiV1UsersMeDeleteMutationError = unknown; + +/** + * @summary Delete Me + */ +export const useDeleteMeApiV1UsersMeDelete = < + TError = unknown, + TContext = unknown, +>( + options?: { + mutation?: UseMutationOptions< + Awaited>, + TError, + void, + TContext + >; + request?: SecondParameter; + }, + queryClient?: QueryClient, +): UseMutationResult< + Awaited>, + TError, + void, + TContext +> => { + return useMutation( + getDeleteMeApiV1UsersMeDeleteMutationOptions(options), + queryClient, + ); +}; /** * Return the authenticated user's current profile payload. * @summary Get Me @@ -201,108 +303,6 @@ export function useGetMeApiV1UsersMeGet< return { ...query, queryKey: queryOptions.queryKey }; } -/** - * Delete the authenticated account and any personal-only organizations. - * @summary Delete Me - */ -export type deleteMeApiV1UsersMeDeleteResponse200 = { - data: OkResponse; - status: 200; -}; - -export type deleteMeApiV1UsersMeDeleteResponseSuccess = - deleteMeApiV1UsersMeDeleteResponse200 & { - headers: Headers; - }; -export type deleteMeApiV1UsersMeDeleteResponse = - deleteMeApiV1UsersMeDeleteResponseSuccess; - -export const getDeleteMeApiV1UsersMeDeleteUrl = () => { - return `/api/v1/users/me`; -}; - -export const deleteMeApiV1UsersMeDelete = async ( - options?: RequestInit, -): Promise => { - return customFetch( - getDeleteMeApiV1UsersMeDeleteUrl(), - { - ...options, - method: "DELETE", - }, - ); -}; - -export const getDeleteMeApiV1UsersMeDeleteMutationOptions = < - TError = unknown, - TContext = unknown, ->(options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - void, - TContext - >; - request?: SecondParameter; -}): UseMutationOptions< - Awaited>, - TError, - void, - TContext -> => { - const mutationKey = ["deleteMeApiV1UsersMeDelete"]; - const { mutation: mutationOptions, request: requestOptions } = options - ? options.mutation && - "mutationKey" in options.mutation && - options.mutation.mutationKey - ? options - : { ...options, mutation: { ...options.mutation, mutationKey } } - : { mutation: { mutationKey }, request: undefined }; - - const mutationFn: MutationFunction< - Awaited>, - void - > = () => { - return deleteMeApiV1UsersMeDelete(requestOptions); - }; - - return { mutationFn, ...mutationOptions }; -}; - -export type DeleteMeApiV1UsersMeDeleteMutationResult = NonNullable< - Awaited> ->; - -export type DeleteMeApiV1UsersMeDeleteMutationError = unknown; - -/** - * @summary Delete Me - */ -export const useDeleteMeApiV1UsersMeDelete = < - TError = unknown, - TContext = unknown, ->( - options?: { - mutation?: UseMutationOptions< - Awaited>, - TError, - void, - TContext - >; - request?: SecondParameter; - }, - queryClient?: QueryClient, -): UseMutationResult< - Awaited>, - TError, - void, - TContext -> => { - return useMutation( - getDeleteMeApiV1UsersMeDeleteMutationOptions(options), - queryClient, - ); -}; /** * Apply partial profile updates for the authenticated user. * @summary Update Me diff --git a/frontend/src/app/activity/page.tsx b/frontend/src/app/activity/page.tsx index 3a382956..10a8cb46 100644 --- a/frontend/src/app/activity/page.tsx +++ b/frontend/src/app/activity/page.tsx @@ -2,6 +2,7 @@ import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react"; import Link from "next/link"; +import { useSearchParams } from "next/navigation"; import { SignedIn, SignedOut, useAuth } from "@/auth/clerk"; import { Activity as ActivityIcon } from "lucide-react"; @@ -82,6 +83,7 @@ type FeedItem = { created_at: string; event_type: FeedEventType; message: string | null; + source_event_id: string | null; agent_id: string | null; actor_name: string; actor_role: string | null; @@ -118,6 +120,9 @@ const formatShortTimestamp = (value: string) => { }); }; +const feedItemElementId = (id: string): string => + `activity-item-${id.replace(/[^a-zA-Z0-9_-]/g, "-")}`; + const normalizeAgent = (agent: AgentRead): Agent => ({ ...agent, status: (agent.status ?? "offline").trim() || "offline", @@ -205,7 +210,13 @@ const eventPillClass = (eventType: FeedEventType): string => { return "border-slate-200 bg-slate-100 text-slate-700"; }; -const FeedCard = memo(function FeedCard({ item }: { item: FeedItem }) { +const FeedCard = memo(function FeedCard({ + item, + isHighlighted = false, +}: { + item: FeedItem; + isHighlighted?: boolean; +}) { const message = (item.message ?? "").trim(); const authorAvatar = (item.actor_name[0] ?? "A").toUpperCase(); const taskHref = @@ -215,7 +226,15 @@ const FeedCard = memo(function FeedCard({ item }: { item: FeedItem }) { const boardHref = item.board_id ? `/boards/${item.board_id}` : null; return ( -
+
{authorAvatar} @@ -302,7 +321,15 @@ export default function ActivityPage() { }, []); const { isSignedIn } = useAuth(); + const searchParams = useSearchParams(); const isPageActive = usePageActive(); + const selectedEventId = useMemo(() => { + const value = searchParams.get("eventId"); + if (!value) return null; + const trimmed = value.trim(); + return trimmed.length > 0 ? trimmed : null; + }, [searchParams]); + const [highlightedFeedItemId, setHighlightedFeedItemId] = useState(null); const membershipQuery = useGetMyMembershipApiV1OrganizationsMeMemberGet< getMyMembershipApiV1OrganizationsMeMemberGetResponse, @@ -409,6 +436,7 @@ export default function ActivityPage() { created_at: event.created_at, event_type: event.event_type, message: event.message ?? null, + source_event_id: event.id, agent_id: author.id, actor_name: author.name, actor_role: author.role, @@ -435,6 +463,7 @@ export default function ActivityPage() { created_at: comment.created_at, event_type: "task.comment", message: comment.message ?? null, + source_event_id: null, agent_id: author.id, actor_name: author.name, actor_role: author.role, @@ -502,6 +531,7 @@ export default function ActivityPage() { created_at: stamp, event_type: kind, message, + source_event_id: null, agent_id: author.id, actor_name: author.name, actor_role: author.role, @@ -528,6 +558,7 @@ export default function ActivityPage() { created_at: memory.created_at, event_type: command ? "board.command" : "board.chat", message: content || null, + source_event_id: null, agent_id: null, actor_name: actorName, actor_role: null, @@ -593,6 +624,7 @@ export default function ActivityPage() { created_at: stamp, event_type: kind, message, + source_event_id: null, agent_id: agent.id, actor_name: agent.name, actor_role: roleFromAgent(agent), @@ -1285,6 +1317,48 @@ export default function ActivityPage() { }); }, [feedItems]); + const selectedFeedItemId = useMemo(() => { + if (!selectedEventId) return null; + const directMatch = orderedFeed.find( + (item) => item.source_event_id === selectedEventId, + ); + if (directMatch) return directMatch.id; + const fallbackMatch = orderedFeed.find( + (item) => + item.id === selectedEventId || item.id === `activity:${selectedEventId}`, + ); + return fallbackMatch?.id ?? null; + }, [orderedFeed, selectedEventId]); + + useEffect(() => { + if (!selectedFeedItemId) { + setHighlightedFeedItemId(null); + return; + } + + setHighlightedFeedItemId(selectedFeedItemId); + const scrollTimeout = window.setTimeout(() => { + const element = document.getElementById(feedItemElementId(selectedFeedItemId)); + if (!element) return; + element.scrollIntoView({ behavior: "smooth", block: "center" }); + }, 50); + + const clearHighlightTimeout = window.setTimeout(() => { + setHighlightedFeedItemId((current) => + current === selectedFeedItemId ? null : current, + ); + }, 4_000); + + return () => { + window.clearTimeout(scrollTimeout); + window.clearTimeout(clearHighlightTimeout); + }; + }, [selectedFeedItemId]); + + const hasUnresolvedDeepLink = Boolean( + selectedEventId && !selectedFeedItemId && !isFeedLoading && !feedError, + ); + return ( {isMounted ? ( @@ -1321,11 +1395,22 @@ export default function ActivityPage() {
+ {hasUnresolvedDeepLink ? ( +
+ Requested activity item is not in the current feed window yet. +
+ ) : null} } + renderItem={(item) => ( + + )} />
diff --git a/frontend/src/app/boards/[boardId]/page.tsx b/frontend/src/app/boards/[boardId]/page.tsx index 7f686bd2..ccb7358a 100644 --- a/frontend/src/app/boards/[boardId]/page.tsx +++ b/frontend/src/app/boards/[boardId]/page.tsx @@ -36,7 +36,6 @@ import { import { DashboardShell } from "@/components/templates/DashboardShell"; import { BoardChatComposer } from "@/components/BoardChatComposer"; import { TaskCustomFieldsEditor } from "./TaskCustomFieldsEditor"; -import { buildUrlWithTaskId } from "./task-detail-query"; import { Button } from "@/components/ui/button"; import { Dialog, @@ -538,6 +537,9 @@ const formatShortTimestamp = (value: string) => { }); }; +const commentElementId = (id: string): string => + `task-comment-${id.replace(/[^a-zA-Z0-9_-]/g, "-")}`; + type ToastMessage = { id: number; message: string; @@ -584,13 +586,23 @@ const resolveBoardAccess = ( const TaskCommentCard = memo(function TaskCommentCard({ comment, authorLabel, + isHighlighted = false, }: { comment: TaskComment; authorLabel: string; + isHighlighted?: boolean; }) { const message = (comment.message ?? "").trim(); return ( -
+
{authorLabel} {formatShortTimestamp(comment.created_at)} @@ -735,6 +747,35 @@ export default function BoardDetailPage() { const { isSignedIn } = useAuth(); const isPageActive = usePageActive(); const taskIdFromUrl = searchParams.get("taskId"); + const commentIdFromUrl = searchParams.get("commentId"); + const panelFromUrl = searchParams.get("panel"); + const buildUrlWithTaskAndComment = useCallback( + ( + taskId: string | null, + commentId: string | null, + panel: "chat" | null = null, + ): string => { + const params = new URLSearchParams(searchParams.toString()); + if (taskId) { + params.set("taskId", taskId); + } else { + params.delete("taskId"); + } + if (commentId) { + params.set("commentId", commentId); + } else { + params.delete("commentId"); + } + if (panel) { + params.set("panel", panel); + } else { + params.delete("panel"); + } + const next = params.toString(); + return next ? `${pathname}?${next}` : pathname; + }, + [pathname, searchParams], + ); const membershipQuery = useGetMyMembershipApiV1OrganizationsMeMemberGet< getMyMembershipApiV1OrganizationsMeMemberGetResponse, @@ -818,7 +859,9 @@ export default function BoardDetailPage() { const [selectedTask, setSelectedTask] = useState(null); const selectedTaskIdRef = useRef(null); const openedTaskIdFromUrlRef = useRef(null); + const openedPanelFromUrlRef = useRef(null); const [comments, setComments] = useState([]); + const [highlightedCommentId, setHighlightedCommentId] = useState(null); const [liveFeed, setLiveFeed] = useState([]); const liveFeedRef = useRef([]); const liveFeedFlashTimersRef = useRef>({}); @@ -2344,26 +2387,36 @@ export default function BoardDetailPage() { ); const openComments = useCallback( - (task: { id: string }) => { + ( + task: { id: string }, + options?: { + preserveCommentTarget?: boolean; + }, + ) => { setIsChatOpen(false); setIsLiveFeedOpen(false); const fullTask = tasksRef.current.find((item) => item.id === task.id); if (!fullTask) return; + const preserveCommentTarget = options?.preserveCommentTarget === true; const currentTaskIdFromUrl = searchParams.get("taskId"); - if (currentTaskIdFromUrl !== fullTask.id) { - router.replace( - buildUrlWithTaskId(pathname, searchParams, fullTask.id), - { - scroll: false, - }, - ); + const currentCommentIdFromUrl = searchParams.get("commentId"); + const targetCommentId = preserveCommentTarget + ? currentCommentIdFromUrl + : null; + if ( + currentTaskIdFromUrl !== fullTask.id || + currentCommentIdFromUrl !== targetCommentId + ) { + router.replace(buildUrlWithTaskAndComment(fullTask.id, targetCommentId), { + scroll: false, + }); } selectedTaskIdRef.current = fullTask.id; setSelectedTask(fullTask); setIsDetailOpen(true); void loadComments(task.id); }, - [loadComments, pathname, router, searchParams], + [buildUrlWithTaskAndComment, loadComments, router, searchParams], ); const selectedTaskDependencies = useMemo(() => { @@ -2425,33 +2478,76 @@ export default function BoardDetailPage() { if (openedTaskIdFromUrlRef.current === taskIdFromUrl) return; const exists = tasks.some((task) => task.id === taskIdFromUrl); if (!exists) { - router.replace(buildUrlWithTaskId(pathname, searchParams, null), { + router.replace(buildUrlWithTaskAndComment(null, null), { scroll: false, }); return; } openedTaskIdFromUrlRef.current = taskIdFromUrl; - openComments({ id: taskIdFromUrl }); + openComments({ id: taskIdFromUrl }, { preserveCommentTarget: true }); }, [ hasLoadedBoardSnapshot, + buildUrlWithTaskAndComment, openComments, - pathname, router, - searchParams, taskIdFromUrl, tasks, ]); + useEffect(() => { + if (!hasLoadedBoardSnapshot) return; + if (panelFromUrl !== "chat") { + openedPanelFromUrlRef.current = null; + return; + } + if (openedPanelFromUrlRef.current === "chat") return; + openedPanelFromUrlRef.current = "chat"; + setIsDetailOpen(false); + selectedTaskIdRef.current = null; + setSelectedTask(null); + setComments([]); + setCommentsError(null); + setPostCommentError(null); + setIsLiveFeedOpen(false); + setIsChatOpen(true); + }, [hasLoadedBoardSnapshot, panelFromUrl]); + + useEffect(() => { + if (!isDetailOpen || !commentIdFromUrl) { + setHighlightedCommentId(null); + return; + } + const target = comments.find((comment) => comment.id === commentIdFromUrl); + if (!target) return; + + setHighlightedCommentId(target.id); + const scrollTimer = window.setTimeout(() => { + const element = document.getElementById(commentElementId(target.id)); + if (!element) return; + element.scrollIntoView({ behavior: "smooth", block: "center" }); + }, 60); + const clearTimer = window.setTimeout(() => { + setHighlightedCommentId((current) => + current === target.id ? null : current, + ); + }, 4_000); + return () => { + window.clearTimeout(scrollTimer); + window.clearTimeout(clearTimer); + }; + }, [commentIdFromUrl, comments, isDetailOpen]); + const closeComments = () => { openedTaskIdFromUrlRef.current = null; - if (searchParams.get("taskId")) { - router.replace(buildUrlWithTaskId(pathname, searchParams, null), { + if (searchParams.get("taskId") || searchParams.get("commentId")) { + router.replace(buildUrlWithTaskAndComment(null, null), { scroll: false, }); } setIsDetailOpen(false); selectedTaskIdRef.current = null; setSelectedTask(null); + setHighlightedCommentId(null); setComments([]); setCommentsError(null); setPostCommentError(null); @@ -2463,10 +2559,24 @@ export default function BoardDetailPage() { closeComments(); } setIsLiveFeedOpen(false); + if ( + searchParams.get("panel") !== "chat" || + searchParams.get("taskId") || + searchParams.get("commentId") + ) { + router.replace(buildUrlWithTaskAndComment(null, null, "chat"), { + scroll: false, + }); + } setIsChatOpen(true); }; const closeBoardChat = () => { + if (searchParams.get("panel") === "chat") { + router.replace(buildUrlWithTaskAndComment(null, null, null), { + scroll: false, + }); + } setIsChatOpen(false); setChatError(null); }; @@ -3866,6 +3976,7 @@ export default function BoardDetailPage() { = [ - { value: "24h", label: "24 hours" }, - { value: "3d", label: "3 days" }, - { value: "7d", label: "7 days" }, - { value: "14d", label: "14 days" }, - { value: "1m", label: "1 month" }, - { value: "3m", label: "3 months" }, - { value: "6m", label: "6 months" }, - { value: "1y", label: "1 year" }, -]; -const DASHBOARD_RANGE_SET = new Set( - DASHBOARD_RANGE_OPTIONS.map((option) => option.value), -); -const ALL_FILTER_VALUE = "all"; -const DEFAULT_RANGE: RangeKey = "7d"; +const numberFormatter = new Intl.NumberFormat("en-US"); +const SESSION_ID_KEYS = ["key", "id", "session_key", "sessionKey", "sessionId"]; -const formatPeriod = (value: string, bucket: BucketKey) => { - const date = parseApiDatetime(value); - if (!date) return ""; - if (bucket === "hour") return hourFormatter.format(date); - if (bucket === "month") return monthFormatter.format(date); - return dayFormatter.format(date); +const toRecord = (value: unknown): Record | null => { + if (!value || Array.isArray(value) || typeof value !== "object") return null; + return value as Record; }; -const formatNumber = (value: number) => value.toLocaleString("en-US"); -const formatPercent = (value: number) => `${value.toFixed(1)}%`; -const formatHours = (value: number | null) => - value === null || !Number.isFinite(value) ? "--" : `${value.toFixed(1)}h`; -const calcProgress = (values?: number[]) => { - if (!values || values.length === 0) return 0; - const max = Math.max(...values); - if (!Number.isFinite(max) || max <= 0) return 0; - const latest = values[values.length - 1] ?? 0; - return Math.max(0, Math.min(100, Math.round((latest / max) * 100))); +const readString = ( + record: Record | null, + keys: string[], +): string | null => { + if (!record) return null; + for (const key of keys) { + const value = record[key]; + if (typeof value === "string" && value.trim()) return value.trim(); + } + return null; }; -function buildSeries(series: RangeSeries) { - return series.points.map((point) => ({ - period: formatPeriod(point.period, series.bucket), - value: Number(point.value ?? 0), - })); -} - -function buildWipSeries(series: WipRangeSeries) { - return series.points.map((point) => ({ - period: formatPeriod(point.period, series.bucket), - inbox: Number(point.inbox ?? 0), - in_progress: Number(point.in_progress ?? 0), - review: Number(point.review ?? 0), - done: Number(point.done ?? 0), - })); -} - -function buildSparkline(series: RangeSeries) { - return { - values: series.points.map((point) => Number(point.value ?? 0)), - labels: series.points.map((point) => - formatPeriod(point.period, series.bucket), - ), - bucket: series.bucket, - }; -} - -function buildWipSparkline(series: WipRangeSeries, key: keyof WipPoint) { - return { - values: series.points.map((point) => Number(point[key] ?? 0)), - labels: series.points.map((point) => - formatPeriod(point.period, series.bucket), - ), - bucket: series.bucket, - }; -} - -type TooltipProps = { - active?: boolean; - payload?: Array<{ value?: number; name?: string; color?: string }>; - label?: string; - formatter?: (value: number, name?: string) => string; +const readNumber = ( + record: Record | null, + keys: string[], +): number | null => { + if (!record) return null; + for (const key of keys) { + const value = record[key]; + if (typeof value === "number" && Number.isFinite(value)) return value; + if (typeof value === "string") { + const cleaned = value.replace(/[^0-9.-]/g, ""); + const parsed = Number.parseFloat(cleaned); + if (Number.isFinite(parsed)) return parsed; + } + } + return null; }; -function TooltipCard({ active, payload, label, formatter }: TooltipProps) { - if (!active || !payload?.length) return null; +const readStringFromRecords = ( + records: Array | null>, + keys: string[], +): string | null => { + for (const record of records) { + const value = readString(record, keys); + if (value) return value; + } + return null; +}; + +const readNumberFromRecords = ( + records: Array | null>, + keys: string[], +): number | null => { + for (const record of records) { + const value = readNumber(record, keys); + if (value !== null) return value; + } + return null; +}; + +const normalizeEpochMs = (value: number): number => { + if (value >= 1_000_000_000_000) return value; + if (value >= 1_000_000_000) return value * 1000; + return value; +}; + +const readTimestamp = ( + record: Record | null, + keys: string[], +): string | null => { + if (!record) return null; + for (const key of keys) { + const value = record[key]; + if (typeof value === "number" && Number.isFinite(value)) { + const date = new Date(normalizeEpochMs(value)); + if (!Number.isNaN(date.getTime())) return date.toISOString(); + } + if (typeof value === "string") { + const trimmed = value.trim(); + if (!trimmed) continue; + const numeric = Number.parseFloat(trimmed); + if (Number.isFinite(numeric)) { + const date = new Date(normalizeEpochMs(numeric)); + if (!Number.isNaN(date.getTime())) return date.toISOString(); + } + const parsed = parseTimestamp(trimmed); + if (parsed) return parsed.toISOString(); + } + } + return null; +}; + +const readTimestampFromRecords = ( + records: Array | null>, + keys: string[], +): string | null => { + for (const record of records) { + const value = readTimestamp(record, keys); + if (value) return value; + } + return null; +}; + +const sessionIdentifiers = (record: Record | null): string[] => { + if (!record) return []; + const ids = SESSION_ID_KEYS.map((key) => readString(record, [key])).filter(Boolean) as string[]; + return [...new Set(ids)]; +}; + +const sharesSessionIdentity = (left: string[], right: string[]): boolean => + left.some((value) => right.includes(value)); + +const compactNumber = (value: number): string => { + if (!Number.isFinite(value)) return DASH; + if (Math.abs(value) >= 1_000_000) { + return `${(value / 1_000_000).toFixed(1)}m`; + } + if (Math.abs(value) >= 1_000) { + return `${(value / 1_000).toFixed(1)}k`; + } + return numberFormatter.format(value); +}; + +const formatCount = (value: number): string => + Number.isFinite(value) ? numberFormatter.format(Math.max(0, Math.round(value))) : "0"; + +const formatPercent = (value: number): string => + Number.isFinite(value) ? `${value.toFixed(1)}%` : DASH; + +const formatPerDay = (total: number, days: number): string => { + if (!Number.isFinite(total) || !Number.isFinite(days) || days <= 0) return DASH; + return `${(total / days).toFixed(1)}/day`; +}; + +const toSessionSummaries = ( + sessions: unknown[] | null | undefined, + mainSession: unknown, +): SessionSummary[] => { + const sessionRecords = (sessions ?? []).map(toRecord).filter(Boolean) as Array< + Record + >; + const mainRecord = toRecord(mainSession); + const mainIdentifiers = sessionIdentifiers(mainRecord); + + if (mainRecord && mainIdentifiers.length > 0) { + const exists = sessionRecords.some( + (entry) => sharesSessionIdentity(sessionIdentifiers(entry), mainIdentifiers), + ); + if (!exists) sessionRecords.unshift(mainRecord); + } + + const uniqueRecords: Record[] = []; + const seenIdentifiers = new Set(); + + for (const entry of sessionRecords) { + const identifiers = sessionIdentifiers(entry); + if (identifiers.length > 0 && identifiers.some((value) => seenIdentifiers.has(value))) { + continue; + } + uniqueRecords.push(entry); + identifiers.forEach((value) => seenIdentifiers.add(value)); + } + + return uniqueRecords.map((entry, index) => { + const usageRecord = toRecord(entry.usage); + const statsRecord = toRecord(entry.stats); + const metricsRecord = toRecord(entry.metrics); + const originRecord = toRecord(entry.origin); + const candidateRecords = [entry, usageRecord, statsRecord, metricsRecord]; + + const identifiers = sessionIdentifiers(entry); + const key = + readString(entry, ["key", "session_key", "sessionKey", "id", "sessionId"]) ?? + `session-${index}`; + const label = readString(entry, ["label", "name", "title"]) ?? key; + const channel = readStringFromRecords([entry, originRecord], [ + "channel", + "source", + "kind", + "chatType", + ]); + const model = readString(entry, ["model", "model_name", "provider", "engine"]); + const modelProvider = readString(entry, ["modelProvider", "model_provider", "provider"]); + const lastSeenAt = readTimestampFromRecords(candidateRecords, [ + "updated_at", + "updatedAt", + "last_updated_at", + "lastUpdatedAt", + "last_seen_at", + "lastSeen", + "last_seen", + "last_active_at", + "lastActiveAt", + "lastActivityAt", + "activityAt", + "created_at", + "createdAt", + ]); + + const usedTokens = readNumberFromRecords(candidateRecords, [ + "used", + "used_tokens", + "tokens", + "current", + "token_count", + "tokenCount", + "totalTokens", + "total_tokens", + "inputTokens", + "input_tokens", + ]); + const maxTokens = readNumberFromRecords(candidateRecords, [ + "max", + "limit", + "token_limit", + "capacity", + "max_tokens", + "maxTokens", + "context_window", + "contextWindow", + "contextTokens", + "context_tokens", + "maxContextTokens", + "max_context_tokens", + ]); + + const pctFromPayload = readNumberFromRecords(candidateRecords, [ + "pct", + "percent", + "ratio_pct", + "ratioPct", + "token_pct", + "usage_pct", + "percentUsed", + "contextPercent", + ]); + const usagePct = Number.isFinite(pctFromPayload ?? NaN) + ? Math.max(0, Math.min(100, Math.round(pctFromPayload ?? 0))) + : usedTokens !== null && maxTokens !== null && maxTokens > 0 + ? Math.max(0, Math.min(100, Math.round((usedTokens / maxTokens) * 100))) + : 0; + + const usage = + usedTokens !== null && maxTokens !== null + ? `${compactNumber(usedTokens)}/${compactNumber(maxTokens)} (${usagePct}%)` + : usedTokens !== null + ? `${compactNumber(usedTokens)} tokens` + : DASH; + + const subtitleBits = [channel, model].filter(Boolean) as string[]; + const subtitle = subtitleBits.length > 0 ? subtitleBits.join(" · ") : "Session"; + const modelWithProvider = + modelProvider && model && modelProvider !== model ? `${model} · ${modelProvider}` : model; + const subtitleWithProvider = [channel, modelWithProvider].filter(Boolean).join(" · "); + + return { + key, + title: label, + subtitle: subtitleWithProvider || subtitle, + usage, + lastSeenAt, + isMain: + mainIdentifiers.length > 0 && + sharesSessionIdentity(identifiers, mainIdentifiers), + }; + }); +}; + +function TopMetricCard({ + title, + value, + secondary, + infoText, + icon, + accent, +}: { + title: string; + value: string; + secondary?: string; + infoText?: string; + icon: React.ReactNode; + accent: "blue" | "green" | "violet" | "emerald"; +}) { + const iconTone = + accent === "blue" + ? "bg-blue-50 text-blue-600" + : accent === "green" + ? "bg-emerald-50 text-emerald-600" + : accent === "violet" + ? "bg-violet-50 text-violet-600" + : "bg-green-50 text-green-600"; + return ( -
- {label ?
Period: {label}
: null} -
- {payload.map((entry, index) => ( -
- +
+
+
+
+

+ {title} +

+ {infoText ? ( - {entry.name ?? "Value"} + className="inline-flex text-slate-400" + title={infoText} + aria-label={infoText} + > + + + ) : null} +
+
+

{value}

+ {secondary ? ( +

{secondary}

+ ) : null} +
+
+
+ {icon} +
+
+
+ ); +} + +function InfoBlock({ + title, + badge, + infoText, + rows, +}: { + title: string; + badge?: { text: string; tone: "online" | "offline" | "neutral" }; + infoText?: string; + rows: SummaryRow[]; +}) { + return ( +
+
+
+

{title}

+ {infoText ? ( + + - - Value: - {formatter - ? formatter(Number(entry.value ?? 0), entry.name) - : entry.value} + ) : null} +
+ {badge ? ( + + {badge.text} + + ) : null} +
+
+ {rows.map((row) => ( +
+ {row.label} + + {row.value}
))}
-
- ); -} - -function KpiCard({ - label, - value, - sublabel, - icon, - progress = 0, -}: { - label: string; - value: string; - sublabel?: string; - icon: React.ReactNode; - progress?: number; -}) { - return ( -
-
-

- {label} -

-
{icon}
-
-
-

- {value} -

-
- {sublabel ? ( -

{sublabel}

- ) : null} -
-
-
-
- ); -} - -function ChartCard({ - title, - subtitle, - children, -}: { - title: string; - subtitle: string; - children: React.ReactNode; -}) { - return ( -
-
-
-

- {title} -

-

{subtitle}

-
-
-
{children}
-
+ ); } export default function DashboardPage() { - const { isSignedIn } = useAuth(); - const pathname = usePathname(); const router = useRouter(); - const searchParams = useSearchParams(); - const selectedRangeParam = searchParams.get("range"); - const selectedGroupParam = searchParams.get("group"); - const selectedBoardParam = searchParams.get("board"); - const selectedRange: RangeKey = - selectedRangeParam && - DASHBOARD_RANGE_SET.has(selectedRangeParam as RangeKey) - ? (selectedRangeParam as RangeKey) - : DEFAULT_RANGE; - const selectedGroupId = - selectedGroupParam && selectedGroupParam !== ALL_FILTER_VALUE - ? selectedGroupParam - : null; - const selectedBoardId = - selectedBoardParam && selectedBoardParam !== ALL_FILTER_VALUE - ? selectedBoardParam - : null; + const { isSignedIn } = useAuth(); - const boardsQuery = useListBoardsApiV1BoardsGet< - listBoardsApiV1BoardsGetResponse, - ApiError - >( - { limit: 200 }, - { - query: { - enabled: Boolean(isSignedIn), - refetchInterval: 30_000, - refetchOnMount: "always", - }, - }, - ); - const boardGroupsQuery = useListBoardGroupsApiV1BoardGroupsGet< - listBoardGroupsApiV1BoardGroupsGetResponse, - ApiError - >( + const boardsQuery = useListBoardsApiV1BoardsGet( { limit: 200 }, { query: { @@ -306,57 +490,15 @@ export default function DashboardPage() { }, ); - const boards = useMemo( - () => - boardsQuery.data?.status === 200 - ? [...(boardsQuery.data.data.items ?? [])].sort((a, b) => - a.name.localeCompare(b.name), - ) - : [], - [boardsQuery.data], - ); - const boardGroups = useMemo( - () => - boardGroupsQuery.data?.status === 200 - ? [...(boardGroupsQuery.data.data.items ?? [])].sort((a, b) => - a.name.localeCompare(b.name), - ) - : [], - [boardGroupsQuery.data], - ); - - const filteredBoards = useMemo( - () => - selectedGroupId - ? boards.filter((board) => board.board_group_id === selectedGroupId) - : boards, - [boards, selectedGroupId], - ); - const selectedBoard = useMemo( - () => boards.find((board) => board.id === selectedBoardId) ?? null, - [boards, selectedBoardId], - ); - const selectedGroup = useMemo( - () => boardGroups.find((group) => group.id === selectedGroupId) ?? null, - [boardGroups, selectedGroupId], - ); - - const boardGroupOptions = useMemo( - () => [ - { value: ALL_FILTER_VALUE, label: "All groups" }, - ...boardGroups.map((group) => ({ value: group.id, label: group.name })), - ], - [boardGroups], - ); - const boardOptions = useMemo( - () => [ - { value: ALL_FILTER_VALUE, label: "All boards" }, - ...filteredBoards.map((board) => ({ - value: board.id, - label: board.name, - })), - ], - [filteredBoards], + const agentsQuery = useListAgentsApiV1AgentsGet( + { limit: 200 }, + { + query: { + enabled: Boolean(isSignedIn), + refetchInterval: 15_000, + refetchOnMount: "always", + }, + }, ); const metricsQuery = useDashboardMetricsApiV1MetricsDashboardGet< @@ -364,9 +506,7 @@ export default function DashboardPage() { ApiError >( { - range_key: selectedRange, - board_id: selectedBoardId ?? undefined, - group_id: selectedGroupId ?? undefined, + range_key: DASHBOARD_RANGE, }, { query: { @@ -377,53 +517,375 @@ export default function DashboardPage() { }, ); - const metrics = - metricsQuery.data?.status === 200 ? metricsQuery.data.data : null; - - const throughputSeries = useMemo( - () => (metrics ? buildSeries(metrics.throughput.primary) : []), - [metrics], - ); - const cycleSeries = useMemo( - () => (metrics ? buildSeries(metrics.cycle_time.primary) : []), - [metrics], - ); - const errorSeries = useMemo( - () => (metrics ? buildSeries(metrics.error_rate.primary) : []), - [metrics], - ); - const wipSeries = useMemo( - () => (metrics ? buildWipSeries(metrics.wip.primary) : []), - [metrics], + const activityQuery = useListActivityApiV1ActivityGet( + { limit: 200 }, + { + query: { + enabled: Boolean(isSignedIn), + refetchInterval: 15_000, + refetchOnMount: "always", + }, + }, ); - const cycleSpark = useMemo( - () => (metrics ? buildSparkline(metrics.cycle_time.primary) : null), - [metrics], - ); - const errorSpark = useMemo( - () => (metrics ? buildSparkline(metrics.error_rate.primary) : null), - [metrics], - ); - const wipSpark = useMemo( + const boards = useMemo( () => - metrics ? buildWipSparkline(metrics.wip.primary, "in_progress") : null, - [metrics], + boardsQuery.data?.status === 200 + ? [...(boardsQuery.data.data.items ?? [])].sort((a, b) => a.name.localeCompare(b.name)) + : [], + [boardsQuery.data], ); - const activeProgress = useMemo( - () => (metrics ? Math.min(100, metrics.kpis.active_agents * 12.5) : 0), - [metrics], + const agents = useMemo( + () => + agentsQuery.data?.status === 200 + ? [...(agentsQuery.data.data.items ?? [])].sort((a, b) => a.name.localeCompare(b.name)) + : [], + [agentsQuery.data], ); - const wipProgress = useMemo(() => calcProgress(wipSpark?.values), [wipSpark]); - const errorProgress = useMemo( - () => calcProgress(errorSpark?.values), - [errorSpark], + + const metrics = metricsQuery.data?.status === 200 ? metricsQuery.data.data : null; + + const onlineAgents = useMemo( + () => agents.filter((agent) => (agent.status ?? "").toLowerCase() === "online").length, + [agents], ); - const cycleProgress = useMemo( - () => calcProgress(cycleSpark?.values), - [cycleSpark], + const gatewayTargets = useMemo(() => { + const byGateway = new Map(); + for (const board of boards) { + const gatewayId = board.gateway_id; + if (!gatewayId) continue; + if (byGateway.has(gatewayId)) continue; + byGateway.set(gatewayId, { + gatewayId, + boardId: board.id, + boardName: board.name, + }); + } + return [...byGateway.values()].sort((a, b) => a.boardName.localeCompare(b.boardName)); + }, [boards]); + const hasConfiguredGateways = gatewayTargets.length > 0; + + const gatewayStatusesQuery = useQuery({ + queryKey: [ + "dashboard", + "gateway-statuses", + gatewayTargets.map((target) => `${target.gatewayId}:${target.boardId}`), + ], + enabled: Boolean(isSignedIn && hasConfiguredGateways), + refetchInterval: 15_000, + refetchOnMount: "always", + queryFn: async ({ signal }) => { + return Promise.all( + gatewayTargets.map(async (target): Promise => { + try { + const response = await gatewaysStatusApiV1GatewaysStatusGet( + { board_id: target.boardId }, + { signal }, + ); + if (response.status !== 200) { + return { + ...target, + connected: false, + gatewayUrl: null, + sessionsCount: 0, + sessions: [], + mainSession: null, + mainSessionError: null, + error: null, + requestError: `Gateway status request failed (${response.status})`, + }; + } + const payload: GatewaysStatusResponse = response.data; + return { + ...target, + connected: Boolean(payload.connected), + gatewayUrl: payload.gateway_url ?? null, + sessionsCount: Number(payload.sessions_count ?? 0), + sessions: Array.isArray(payload.sessions) ? payload.sessions : [], + mainSession: payload.main_session ?? null, + mainSessionError: payload.main_session_error ?? null, + error: payload.error ?? null, + requestError: null, + }; + } catch (error) { + if (signal.aborted) throw error; + return { + ...target, + connected: false, + gatewayUrl: null, + sessionsCount: 0, + sessions: [], + mainSession: null, + mainSessionError: null, + error: null, + requestError: + error instanceof Error ? error.message : "Gateway status request failed.", + }; + } + }), + ); + }, + }); + + const gatewaySnapshots = useMemo( + () => gatewayStatusesQuery.data ?? [], + [gatewayStatusesQuery.data], ); + const sessionSummaries = useMemo( + () => + gatewaySnapshots.flatMap((snapshot) => { + if (snapshot.requestError) return []; + const sourceLabel = snapshot.gatewayUrl || snapshot.boardName; + return toSessionSummaries(snapshot.sessions, snapshot.mainSession).map((session) => ({ + ...session, + key: `${snapshot.gatewayId}:${session.key}`, + subtitle: `${sourceLabel} · ${session.subtitle}`, + })); + }), + [gatewaySnapshots], + ); + + const activityEvents = useMemo( + () => + activityQuery.data?.status === 200 + ? [...(activityQuery.data.data.items ?? [])] + : [], + [activityQuery.data], + ); + + const orderedActivityEvents = useMemo( + () => + [...activityEvents].sort((a, b) => { + const left = parseTimestamp(a.created_at)?.getTime() ?? 0; + const right = parseTimestamp(b.created_at)?.getTime() ?? 0; + return right - left; + }), + [activityEvents], + ); + + const recentLogs = orderedActivityEvents.slice(0, 8); + + const latestThroughputPoint = + metrics?.throughput.primary.points?.[metrics.throughput.primary.points.length - 1] ?? null; + const throughputTotal = (metrics?.throughput.primary.points ?? []).reduce( + (sum, point) => sum + Number(point.value ?? 0), + 0, + ); + const completionDaysCount = (metrics?.throughput.primary.points ?? []).reduce( + (sum, point) => sum + (Number(point.value ?? 0) > 0 ? 1 : 0), + 0, + ); + + const inboxTasksMetric = metrics?.kpis.inbox_tasks ?? 0; + const inProgressTasksMetric = metrics?.kpis.in_progress_tasks ?? 0; + const reviewTasksMetric = metrics?.kpis.review_tasks ?? 0; + const doneTasksMetric = metrics?.kpis.done_tasks ?? 0; + + const activeAgentsMetric = onlineAgents; + const tasksTotal = inboxTasksMetric + inProgressTasksMetric + reviewTasksMetric + doneTasksMetric; + const tasksInProgressMetric = metrics?.kpis.tasks_in_progress ?? inProgressTasksMetric; + const errorRateMetric = Number(metrics?.kpis.error_rate_pct ?? 0); + const reviewBacklogRatio = + inProgressTasksMetric > 0 ? reviewTasksMetric / inProgressTasksMetric : null; + + const gatewayConnectedCount = gatewaySnapshots.filter( + (snapshot) => !snapshot.requestError && snapshot.connected, + ).length; + const gatewayDisconnectedCount = gatewaySnapshots.filter( + (snapshot) => !snapshot.requestError && !snapshot.connected, + ).length; + const gatewayUnavailableCount = gatewaySnapshots.filter( + (snapshot) => Boolean(snapshot.requestError), + ).length; + const gatewayHealthErrorCount = gatewaySnapshots.filter( + (snapshot) => Boolean(snapshot.error || snapshot.mainSessionError), + ).length; + + const countedSessions = gatewaySnapshots.reduce( + (sum, snapshot) => sum + Math.max(0, snapshot.sessionsCount), + 0, + ); + const activeSessions = Math.max(countedSessions, sessionSummaries.length); + + const gatewayStatusLabel = !hasConfiguredGateways + ? "Not configured" + : gatewayStatusesQuery.isLoading + ? "Checking" + : gatewayConnectedCount === gatewayTargets.length + ? "All connected" + : gatewayConnectedCount > 0 + ? "Partially connected" + : gatewayUnavailableCount === gatewayTargets.length + ? "Unavailable" + : "Disconnected"; + const gatewayBadgeTone: "online" | "offline" | "neutral" = + gatewayStatusLabel === "All connected" + ? "online" + : gatewayStatusLabel === "Partially connected" || + gatewayStatusLabel === "Disconnected" || + gatewayStatusLabel === "Unavailable" + ? "offline" + : "neutral"; + const gatewayStatusTone: SummaryRow["tone"] = + gatewayStatusLabel === "All connected" + ? "success" + : gatewayStatusLabel === "Checking" || gatewayStatusLabel === "Not configured" + ? "default" + : gatewayStatusLabel === "Partially connected" || gatewayStatusLabel === "Disconnected" + ? "warning" + : "danger"; + + const workloadRows: SummaryRow[] = [ + { + label: "Total work items", + value: formatCount(tasksTotal), + }, + { + label: "Inbox", + value: formatCount(inboxTasksMetric), + }, + { + label: "In progress", + value: formatCount(inProgressTasksMetric), + tone: inProgressTasksMetric > 0 ? "warning" : "default", + }, + { + label: "In review", + value: formatCount(reviewTasksMetric), + }, + { + label: "Completed", + value: formatCount(doneTasksMetric), + tone: doneTasksMetric > 0 ? "success" : "default", + }, + ]; + + const throughputRows: SummaryRow[] = [ + { + label: "Completed tasks", + value: formatCount(throughputTotal), + }, + { label: "Average throughput", value: formatPerDay(throughputTotal, DASHBOARD_RANGE_DAYS) }, + { + label: "Error rate", + value: formatPercent(errorRateMetric), + tone: errorRateMetric > 0 ? "warning" : "success", + }, + { + label: "Completion consistency", + value: `${formatCount(completionDaysCount)} active days`, + tone: completionDaysCount >= Math.ceil(DASHBOARD_RANGE_DAYS * 0.75) ? "success" : "default", + }, + { + label: "Review backlog ratio", + value: + reviewBacklogRatio !== null + ? `${reviewBacklogRatio.toFixed(2)}x` + : reviewTasksMetric > 0 + ? "∞" + : "0.00x", + tone: + reviewBacklogRatio !== null + ? reviewBacklogRatio > 1 + ? "warning" + : "success" + : reviewTasksMetric > 0 + ? "warning" + : "success", + }, + ]; + + const gatewayRows: SummaryRow[] = [ + { label: "Gateway status", value: gatewayStatusLabel, tone: gatewayStatusTone }, + { label: "Configured gateways", value: formatCount(gatewayTargets.length) }, + { + label: "Connected gateways", + value: formatCount(gatewayConnectedCount), + tone: gatewayConnectedCount > 0 ? "success" : "default", + }, + { + label: "Unavailable gateways", + value: formatCount(gatewayUnavailableCount), + tone: gatewayUnavailableCount > 0 ? "danger" : "default", + }, + { + label: "Gateways with issues", + value: formatCount(gatewayHealthErrorCount + gatewayDisconnectedCount), + tone: gatewayHealthErrorCount + gatewayDisconnectedCount > 0 ? "warning" : "success", + }, + ]; + const pendingApprovalItems = metrics?.pending_approvals.items ?? []; + const pendingApprovalsTotal = metrics?.pending_approvals.total ?? 0; + const hasPendingApprovals = pendingApprovalItems.length > 0; + const activityFeedHref = "/activity"; + + const shouldIgnoreRowNavigation = (target: EventTarget | null): boolean => { + if (!(target instanceof HTMLElement)) return false; + return Boolean(target.closest("a")); + }; + + const buildActivityEventHref = (event: ActivityEventRead): string => { + const routeName = event.route_name ?? null; + const routeParams = event.route_params ?? {}; + + if (routeName === "board.approvals") { + const boardId = routeParams.boardId; + if (boardId) { + return `/boards/${encodeURIComponent(boardId)}/approvals`; + } + } + + if (routeName === "board") { + const boardId = routeParams.boardId; + if (boardId) { + const params = new URLSearchParams(); + Object.entries(routeParams).forEach(([key, value]) => { + if (key !== "boardId") params.set(key, value); + }); + const query = params.toString(); + return query + ? `/boards/${encodeURIComponent(boardId)}?${query}` + : `/boards/${encodeURIComponent(boardId)}`; + } + } + + const params = new URLSearchParams( + Object.keys(routeParams).length > 0 + ? routeParams + : { + eventId: event.id, + eventType: event.event_type, + createdAt: event.created_at, + }, + ); + if (event.task_id && !params.has("taskId")) { + params.set("taskId", event.task_id); + } + return `${activityFeedHref}?${params.toString()}`; + }; + + const navigateToActivityFeed = (href: string) => { + router.push(href); + }; + + const handleLogRowClick = ( + event: MouseEvent, + href: string, + ) => { + if (shouldIgnoreRowNavigation(event.target)) return; + navigateToActivityFeed(href); + }; + + const handleLogRowKeyDown = ( + event: KeyboardEvent, + href: string, + ) => { + if (event.key !== "Enter" && event.key !== " ") return; + if (shouldIgnoreRowNavigation(event.target)) return; + event.preventDefault(); + navigateToActivityFeed(href); + }; return ( @@ -437,368 +899,248 @@ export default function DashboardPage() {
-
-
-
-

- Dashboard -

-

- Monitor your mission control operations -

-
-
- { - const nextRange = value as RangeKey; - const params = new URLSearchParams(searchParams.toString()); - params.set("range", nextRange); - router.replace(`${pathname}?${params.toString()}`); - }} - options={DASHBOARD_RANGE_OPTIONS} - ariaLabel="Dashboard date range" - placeholder="Select range" - searchEnabled={false} - triggerClassName="h-9 min-w-[150px] rounded-lg border border-slate-300 bg-white px-3 py-1.5 text-sm text-slate-700 shadow-sm focus:border-blue-500 focus:ring-2 focus:ring-blue-100" - contentClassName="rounded-lg border border-slate-200" - /> - { - const nextGroupId = - value === ALL_FILTER_VALUE ? null : value; - const params = new URLSearchParams(searchParams.toString()); - if (nextGroupId) { - params.set("group", nextGroupId); - } else { - params.delete("group"); - } - if (selectedBoardId) { - const selectedBoardRecord = boards.find( - (board) => board.id === selectedBoardId, - ); - const boardVisibleInScope = nextGroupId - ? selectedBoardRecord?.board_group_id === nextGroupId - : true; - if (!boardVisibleInScope) { - params.delete("board"); - } - } - router.replace(`${pathname}?${params.toString()}`); - }} - options={boardGroupOptions} - ariaLabel="Dashboard board group filter" - placeholder="All groups" - triggerClassName="h-9 min-w-[170px] rounded-lg border border-slate-300 bg-white px-3 py-1.5 text-sm text-slate-700 shadow-sm focus:border-blue-500 focus:ring-2 focus:ring-blue-100" - contentClassName="rounded-lg border border-slate-200" - searchEnabled={false} - disabled={boardGroupsQuery.isLoading} - /> - { - const nextBoardId = - value === ALL_FILTER_VALUE ? null : value; - const params = new URLSearchParams(searchParams.toString()); - if (nextBoardId) { - params.set("board", nextBoardId); - } else { - params.delete("board"); - } - router.replace(`${pathname}?${params.toString()}`); - }} - options={boardOptions} - ariaLabel="Dashboard board filter" - placeholder="All boards" - triggerClassName="h-9 min-w-[170px] rounded-lg border border-slate-300 bg-white px-3 py-1.5 text-sm text-slate-700 shadow-sm focus:border-blue-500 focus:ring-2 focus:ring-blue-100" - contentClassName="rounded-lg border border-slate-200" - searchEnabled={false} - disabled={boardsQuery.isLoading || boardOptions.length <= 1} - /> - {selectedGroup ? ( - - Open group - - ) : null} - {selectedBoard ? ( - - Open board - - ) : null} -
-
-
{metricsQuery.error ? ( -
+
{metricsQuery.error.message}
) : null} - {metricsQuery.isLoading && !metrics ? ( -
- Loading dashboard metrics… +
+ } + accent="blue" + /> + } + accent="green" + /> + } + accent="violet" + /> + } + accent="emerald" + /> +
+ +
+ + + +
+ +
+
+

Pending Approvals

+ + Open global approvals + +
- ) : null} - {metrics ? ( - <> -
- } - progress={activeProgress} - /> - } - progress={wipProgress} - /> - } - progress={errorProgress} - /> - } - progress={cycleProgress} - /> + {!metrics && metricsQuery.isLoading ? ( +
+ Loading pending approvals...
- -
- - - + Pending approvals are temporarily unavailable. +
+ ) : hasPendingApprovals ? ( +
+
+ {pendingApprovalItems.map((item) => ( + - - - - formatNumber(v)} /> - } - /> - - - - - + + + {item.task_title || "Pending approval"} + + + {item.board_name} · {item.confidence}% score + + + + {formatRelativeTimestamp(item.created_at)} + + + ))} +
+ {pendingApprovalsTotal > pendingApprovalItems.length ? ( +

+ Showing latest {formatCount(pendingApprovalItems.length)} of{" "} + {formatCount(pendingApprovalsTotal)} pending approvals. +

+ ) : null} +
+ ) : ( +
+ No pending approvals across your boards. +
+ )} +
- - - - - - - `${v.toFixed(1)}h`} - /> - } - /> - - - - - +
+
+
+

Sessions

+ {formatCount(activeSessions)} +
+
+ {!hasConfiguredGateways ? ( +
+ No gateways are configured for any board yet. +
+ ) : gatewayStatusesQuery.isLoading ? ( +
+ Loading sessions... +
+ ) : sessionSummaries.length > 0 ? ( + <> + {gatewayUnavailableCount > 0 ? ( +
+ {formatCount(gatewayUnavailableCount)} gateway + {gatewayUnavailableCount === 1 ? "" : "s"} unavailable; showing sessions + from reachable gateways. +
+ ) : null} + {sessionSummaries.map((session) => ( +
+
+
+

+ + {session.title} +

+

{session.subtitle}

+
+
+

+ {session.usage === DASH ? "Usage unavailable" : session.usage} +

+

+ {session.lastSeenAt + ? formatRelativeTimestamp(session.lastSeenAt) + : "Activity unavailable"} +

+
+
+
+ ))} + + ) : gatewayUnavailableCount === gatewayTargets.length ? ( +
+ Session data is unavailable for all configured gateways. +
+ ) : ( +
+ No active sessions detected. +
+ )} +
+
- - - - - - - formatPercent(v)} /> - } - /> - - - - - - - +
+

Recent Activity

+ - - - - - - formatNumber(v)} /> - } - /> - - - - - - - - + Open feed + +
- - ) : null} +
+ {recentLogs.length > 0 ? ( + recentLogs.map((event) => { + const eventHref = buildActivityEventHref(event); + return ( +
+ handleLogRowClick(interactionEvent, eventHref) + } + onKeyDown={(interactionEvent) => + handleLogRowKeyDown(interactionEvent, eventHref) + } + className="cursor-pointer overflow-hidden rounded-lg border border-slate-200 bg-white px-3 py-2 transition hover:border-slate-300 focus-visible:border-slate-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300" + > +
+
+
+ +
+

+ {event.event_type} +

+
+
+

{formatRelativeTimestamp(event.created_at)}

+

{formatTimestamp(event.created_at)}

+
+
+
+ ); + }) + ) : ( +
+ + No activity yet +

Activity appears here when events are emitted.

+
+ )} +
+ +