( db: ReturnType<typeof getDatabase>, runtimeId: string, workspaceId?: string, )
| 850 | } |
| 851 | |
| 852 | function selectFallbackQueuedTaskForRuntime( |
| 853 | db: ReturnType<typeof getDatabase>, |
| 854 | runtimeId: string, |
| 855 | workspaceId?: string, |
| 856 | ): { row: Record<string, unknown>; reason: string } | null { |
| 857 | const runtime = readAgentRuntimeSync(runtimeId); |
| 858 | if (!runtime || runtime.status !== "online") { |
| 859 | return null; |
| 860 | } |
| 861 | const rows = db.prepare( |
| 862 | `SELECT |
| 863 | q.id, |
| 864 | q.runtime_id AS runtimeId, |
| 865 | q.workspace_id AS workspaceId, |
| 866 | q.requested_by_user_id AS requestedByUserId, |
| 867 | r.status AS selectedRuntimeStatus, |
| 868 | r.provider AS selectedProvider |
| 869 | FROM agent_task_queue q |
| 870 | JOIN agent_runtime r ON r.id = q.runtime_id |
| 871 | WHERE q.status = 'queued' |
| 872 | AND q.runtime_id <> ? |
| 873 | ${typeof workspaceId === "string" ? "AND q.workspace_id = ?" : ""} |
| 874 | ORDER BY q.priority DESC, q.created_at ASC |
| 875 | LIMIT 20`, |
| 876 | ).all(...(typeof workspaceId === "string" ? [runtimeId, workspaceId] : [runtimeId])) as Array<Record<string, unknown>>; |
| 877 | |
| 878 | for (const row of rows) { |
| 879 | if (row.workspaceId !== runtime.workspaceId) { |
| 880 | continue; |
| 881 | } |
| 882 | if (row.selectedRuntimeStatus === "online") { |
| 883 | continue; |
| 884 | } |
| 885 | const requesterUserId = typeof row.requestedByUserId === "string" ? row.requestedByUserId : undefined; |
| 886 | if (requesterUserId && !canUserUseRuntimeSync(runtime.workspaceId, runtime.id, requesterUserId)) { |
| 887 | continue; |
| 888 | } |
| 889 | const selectedProvider = typeof row.selectedProvider === "string" ? row.selectedProvider : undefined; |
| 890 | if ( |
| 891 | selectedProvider && |
| 892 | runtime.provider !== selectedProvider && |
| 893 | existsUsableOnlineRuntimeForProvider({ |
| 894 | db, |
| 895 | workspaceId: runtime.workspaceId, |
| 896 | provider: selectedProvider, |
| 897 | requesterUserId, |
| 898 | }) |
| 899 | ) { |
| 900 | continue; |
| 901 | } |
| 902 | return { |
| 903 | row, |
| 904 | reason: |
| 905 | selectedProvider && runtime.provider !== selectedProvider |
| 906 | ? `preferred runtime ${String(row.runtimeId)} is offline and no usable ${selectedProvider} runtime is online` |
| 907 | : requesterUserId |
| 908 | ? `preferred runtime ${String(row.runtimeId)} is offline and requester can use ${runtime.id}` |
| 909 | : `preferred runtime ${String(row.runtimeId)} is offline`, |
no test coverage detected