-
- setSearchTerm(e.target.value)}
- className='min-w-0 flex-1'
- />
- void setStatusFilter(next)}
- />
- setProvidersAllowed(filteredProviders, !filteredProvidersAllAllowed)}
- disabled={filteredProviders.length === 0}
- >
- {filteredProvidersAllAllowed ? 'Deselect All' : 'Select All'}
-
-
- {filteredProviders.length === 0 ? (
-
- No providers match your filters.
-
- ) : (
-
- {filteredProviders.map((providerId) => (
-
toggleProvider(providerId)}
- deniedCount={deniedCountByProvider[providerId] ?? 0}
- workspaceId={workspaceId}
- isAllowed={isModelAllowed}
- onToggle={toggleModel}
- onSetDenied={setModelsDenied}
- />
- ))}
+ {configTab === 'providers' &&
+ (blacklistedProviders.isError ? (
+ void blacklistedProviders.refetch()}
+ variant='inline'
+ />
+ ) : !blacklistedProviders.isSuccess ? (
+ Loading providers
+ ) : (
+
+
+ setSearchTerm(e.target.value)}
+ className='min-w-0 flex-1'
+ />
+ void setStatusFilter(next)}
+ />
+
+ setProvidersAllowed(filteredProviders, !filteredProvidersAllAllowed)
+ }
+ disabled={filteredProviders.length === 0}
+ >
+ {filteredProvidersAllAllowed ? 'Deselect All' : 'Select All'}
+
- )}
-
- )}
+ {filteredProviders.length === 0 ? (
+
+ No providers match your filters.
+
+ ) : (
+
+ {filteredProviders.map((providerId) => (
+
toggleProvider(providerId)}
+ deniedCount={deniedCountByProvider[providerId] ?? 0}
+ workspaceId={workspaceId}
+ isAllowed={isModelAllowed}
+ onToggle={toggleModel}
+ onSetDenied={setModelsDenied}
+ />
+ ))}
+
+ )}
+
+ ))}
{configTab === 'blocks' && (
diff --git a/apps/sim/hooks/queries/allowed-providers.ts b/apps/sim/hooks/queries/allowed-providers.ts
index f49de382073..c9461ce2a26 100644
--- a/apps/sim/hooks/queries/allowed-providers.ts
+++ b/apps/sim/hooks/queries/allowed-providers.ts
@@ -2,7 +2,6 @@
import { useQuery } from '@tanstack/react-query'
import { requestJson } from '@/lib/api/client/request'
-import type { ContractJsonResponse } from '@/lib/api/contracts'
import { getAllowedProvidersContract } from '@/lib/api/contracts'
/**
@@ -15,26 +14,13 @@ export const allowedProvidersKeys = {
export const BLACKLISTED_PROVIDERS_STALE_TIME = 5 * 60 * 1000
-type BlacklistedProvidersResponse = ContractJsonResponse
-
-async function fetchBlacklistedProviders(
- signal: AbortSignal
-): Promise {
- try {
- return await requestJson(getAllowedProvidersContract, { signal })
- } catch {
- return { blacklistedProviders: [] }
- }
-}
-
/**
* Hook to fetch the list of blacklisted provider IDs from the server.
*/
-export function useBlacklistedProviders({ enabled = true }: { enabled?: boolean } = {}) {
+export function useBlacklistedProviders() {
return useQuery({
queryKey: allowedProvidersKeys.blacklisted(),
- queryFn: ({ signal }) => fetchBlacklistedProviders(signal),
+ queryFn: ({ signal }) => requestJson(getAllowedProvidersContract, { signal }),
staleTime: BLACKLISTED_PROVIDERS_STALE_TIME,
- enabled,
})
}
diff --git a/packages/testing/src/mocks/terminal-console.mock.ts b/packages/testing/src/mocks/terminal-console.mock.ts
index 16fa06a87ca..cb31cb840b9 100644
--- a/packages/testing/src/mocks/terminal-console.mock.ts
+++ b/packages/testing/src/mocks/terminal-console.mock.ts
@@ -12,10 +12,16 @@ interface ConsoleEntryLike {
[key: string]: unknown
}
+const EMPTY_ENTRIES: ConsoleEntryLike[] = []
+
const entriesByWorkflow: Record = {}
const mockGetWorkflowEntries = vi.fn((workflowId: string) => entriesByWorkflow[workflowId] ?? [])
+const mockUseWorkflowConsoleEntries = vi.fn((workflowId?: string) =>
+ workflowId ? (entriesByWorkflow[workflowId] ?? EMPTY_ENTRIES) : EMPTY_ENTRIES
+)
+
const mockAddConsole = vi.fn((entry: ConsoleEntryLike) => {
const stored = { ...entry, id: entry.id ?? `mock-${generateRandomString(16)}` }
if (!entriesByWorkflow[entry.workflowId]) entriesByWorkflow[entry.workflowId] = []
@@ -54,6 +60,7 @@ const mockWaitForConsoleHydration = vi.fn(async () => undefined)
export function resetTerminalConsoleMock(): void {
for (const key of Object.keys(entriesByWorkflow)) delete entriesByWorkflow[key]
mockGetWorkflowEntries.mockClear()
+ mockUseWorkflowConsoleEntries.mockClear()
mockAddConsole.mockClear()
mockUpdateConsole.mockClear()
mockCancelRunningEntries.mockClear()
@@ -93,6 +100,7 @@ const mockUseTerminalConsoleStore = Object.assign(
*/
export const terminalConsoleMockFns = {
mockGetWorkflowEntries,
+ mockUseWorkflowConsoleEntries,
mockAddConsole,
mockUpdateConsole,
mockCancelRunningEntries,
@@ -120,6 +128,7 @@ export const terminalConsoleMockFns = {
*/
export const terminalConsoleMock = {
useTerminalConsoleStore: mockUseTerminalConsoleStore,
+ useWorkflowConsoleEntries: mockUseWorkflowConsoleEntries,
consolePersistence: mockConsolePersistence,
loadExecutionPointer: mockLoadExecutionPointer,
saveExecutionPointer: mockSaveExecutionPointer,
diff --git a/scripts/check-application-graph.test.ts b/scripts/check-application-graph.test.ts
index f0e6dc0ab56..7a434f24c98 100644
--- a/scripts/check-application-graph.test.ts
+++ b/scripts/check-application-graph.test.ts
@@ -51,22 +51,20 @@ describe('a deferred edge into a forbidden tree', () => {
*/
it('is reported when a root defers the load of a forbidden module', () => {
/**
- * Walked from a module that defers the block registry — `const
- * { getBlockRegistry } = await import('@/blocks/registry')`. A root's own
+ * Walked from a live chat payload module that defers `@/tools/params`. A root's own
* deferred edges are checked before its static imports, so the reported chain
* is that single deferred hop, whatever else the root reaches.
*/
- const root =
- 'app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/hooks/use-mention-data.ts'
+ const root = 'lib/mothership/chat/payload.ts'
const violations = findViolations({
root,
- forbidden: { 'blocks/': FORBIDDEN_PREFIXES['blocks/'] },
+ forbidden: { 'tools/': FORBIDDEN_PREFIXES['tools/'] },
})
expect(violations).toHaveLength(1)
- expect(violations[0].forbidden).toBe('blocks/registry.ts')
+ expect(violations[0].forbidden).toBe('tools/params.ts')
expect(violations[0].reason).toContain('deferred')
- expect(violations[0].path).toEqual([root, 'blocks/registry.ts'])
+ expect(violations[0].path).toEqual([root, 'tools/params.ts'])
})
/**