diff --git a/AgentCompany-New/src/renderer/src/pages/SettingsPage.tsx b/AgentCompany-New/src/renderer/src/pages/SettingsPage.tsx index 4b67f6b4..88ad0ff2 100644 --- a/AgentCompany-New/src/renderer/src/pages/SettingsPage.tsx +++ b/AgentCompany-New/src/renderer/src/pages/SettingsPage.tsx @@ -135,6 +135,7 @@ export function SettingsPage({ snapshot, actions }: PageProps) { providers={providers} catalog={snapshot.providerCatalog} agents={agents} + workspaces={workspaces} providerRateLimits={providerRateLimits} providerRequests={providerRequests} actions={actions} diff --git a/AgentCompany-New/src/renderer/src/pages/settings/ProviderRequestPanel.tsx b/AgentCompany-New/src/renderer/src/pages/settings/ProviderRequestPanel.tsx index be8141f3..802c3461 100644 --- a/AgentCompany-New/src/renderer/src/pages/settings/ProviderRequestPanel.tsx +++ b/AgentCompany-New/src/renderer/src/pages/settings/ProviderRequestPanel.tsx @@ -1,5 +1,5 @@ import { useState, type FormEvent } from "react"; -import type { ProviderCatalogEntry, ProviderRecord, ProviderRequestRecord } from "../../../../shared/domain"; +import type { ProviderCatalogEntry, ProviderRecord, ProviderRequestRecord, WorkspaceRecord } from "../../../../shared/domain"; import { PROVIDER_DATA_POLICY, PROVIDER_EXECUTION_MODE, PROVIDER_REQUEST_STATE, type ProviderExecutionMode } from "../../../../shared/domain"; import type { SnapshotActions } from "../../app/useSnapshot"; import { Button, Field, Icon, Pill, Segmented } from "../../shared/ui"; @@ -8,6 +8,7 @@ interface ProviderRequestPanelProps { orgId: string; providers: ProviderRecord[]; catalog: ProviderCatalogEntry[]; + workspaces: WorkspaceRecord[]; providerRequests: ProviderRequestRecord[]; actions: SnapshotActions; } @@ -26,15 +27,18 @@ export function ProviderRequestPanel({ orgId, providers, catalog, + workspaces, providerRequests, actions, }: ProviderRequestPanelProps) { const executableProviders = providers.filter((provider) => provider.enabled && provider.authType === "api_key"); const [providerId, setProviderId] = useState(executableProviders[0]?.id ?? ""); + const [workspaceId, setWorkspaceId] = useState(workspaces[0]?.id ?? ""); const [mode, setMode] = useState(PROVIDER_EXECUTION_MODE.FOREGROUND); const selectedProvider = resolveSelectedProvider(executableProviders, providerId); const canRunBackground = selectedProvider ? isBackgroundReady(selectedProvider, catalog) : false; const selectedMode = canRunBackground ? mode : PROVIDER_EXECUTION_MODE.FOREGROUND; + const effectiveWorkspaceId = selectedWorkspaceValue(workspaces, workspaceId); const recentRequests = providerRequests .filter((request) => executableProviders.some((provider) => provider.id === request.providerId)) .slice(0, 8); @@ -51,6 +55,7 @@ export function ProviderRequestPanel({ void actions.run(() => window.agentCompany.createProviderResponse({ orgId, providerId: requireProviderId(selectedProvider), + workspaceId: selectedWorkspaceId(workspaces, effectiveWorkspaceId), prompt, instructions: instructions || null, executionMode: selectedMode, @@ -61,7 +66,7 @@ export function ProviderRequestPanel({ <>
Requests
-
+
setWorkspaceId(event.target.value)} + > + {workspaces.length === 0 && } + {workspaces.map((workspace) => ( + + ))} + +
Mode
@@ -99,9 +118,9 @@ export function ProviderRequestPanel({ {recentRequests.length > 0 && ( -
-
-
Provider
Mode
State
Output
Action
+
+
+
Provider
Workspace
Mode
State
Output
Action
{recentRequests.map((request, index) => ( @@ -123,12 +143,14 @@ function ProviderRequestRow({ orgId, request, provider, + workspace, last, actions, }: { orgId: string; request: ProviderRequestRecord; provider: ProviderRecord; + workspace: WorkspaceRecord | null; last: boolean; actions: SnapshotActions; }) { @@ -140,7 +162,8 @@ function ProviderRequestRow({
@@ -148,6 +171,7 @@ function ProviderRequestRow({
{provider.label}
{request.model}
+
{workspace?.name ?? "Organization"}
{request.executionMode}
{request.state}
{request.outputCharCount} chars
@@ -179,6 +203,20 @@ function resolveSelectedProvider(providers: ProviderRecord[], providerId: string return provider ?? providers[0] ?? null; } +function selectedWorkspaceId(workspaces: WorkspaceRecord[], workspaceId: string): string | null { + return workspaces.some((workspace) => workspace.id === workspaceId) ? workspaceId : null; +} + +function selectedWorkspaceValue(workspaces: WorkspaceRecord[], workspaceId: string): string { + if (workspaces.some((workspace) => workspace.id === workspaceId)) return workspaceId; + return workspaces[0]?.id ?? ""; +} + +function resolveRequestWorkspace(workspaces: WorkspaceRecord[], request: ProviderRequestRecord): WorkspaceRecord | null { + if (!request.workspaceId) return null; + return workspaces.find((workspace) => workspace.id === request.workspaceId) ?? null; +} + function requireProviderId(provider: ProviderRecord | null): string { if (!provider) throw new Error("Provider is required."); return provider.id; diff --git a/AgentCompany-New/src/renderer/src/pages/settings/ProvidersPanel.tsx b/AgentCompany-New/src/renderer/src/pages/settings/ProvidersPanel.tsx index 1ecb40b1..66e25632 100644 --- a/AgentCompany-New/src/renderer/src/pages/settings/ProvidersPanel.tsx +++ b/AgentCompany-New/src/renderer/src/pages/settings/ProvidersPanel.tsx @@ -7,6 +7,7 @@ import type { ProviderRateLimitStateRecord, ProviderRecord, ProviderRequestRecord, + WorkspaceRecord, } from "../../../../shared/domain"; import { PROVIDER_DATA_POLICY } from "../../../../shared/domain"; import { ProviderLogo } from "./ProviderLogo"; @@ -19,6 +20,7 @@ interface ProvidersPanelProps { providers: ProviderRecord[]; catalog: ProviderCatalogEntry[]; agents: AgentRecord[]; + workspaces: WorkspaceRecord[]; providerRateLimits: ProviderRateLimitStateRecord[]; providerRequests: ProviderRequestRecord[]; actions: SnapshotActions; @@ -35,7 +37,7 @@ const CLOUD_DEFAULTS: CloudFields = { baseUrl: "", region: "", projectId: "", de const POLICY_GRID = "minmax(150px, 1.2fr) minmax(118px, 0.8fr) minmax(140px, 1fr) 112px 124px 92px"; type WorkspaceScope = "organization" | "workspace"; -export function ProvidersPanel({ orgId, employeeId, providers, catalog, agents, providerRateLimits, providerRequests, actions }: ProvidersPanelProps) { +export function ProvidersPanel({ orgId, employeeId, providers, catalog, agents, workspaces, providerRateLimits, providerRequests, actions }: ProvidersPanelProps) { const [active, setActive] = useState(null); const [signInLaunched, setSignInLaunched] = useState(false); const connected = providers.filter((provider) => provider.enabled); @@ -96,6 +98,7 @@ export function ProvidersPanel({ orgId, employeeId, providers, catalog, agents, orgId={orgId} providers={connected} catalog={catalog} + workspaces={workspaces} providerRequests={providerRequests} actions={actions} />