@@ -104,10 +92,10 @@ export function WorkspacePrompt() {
type="button"
onClick={() => void settingsQuery.refetch()}
disabled={settingsQuery.isFetching}
- className="inline-flex h-7 items-center gap-1.5 rounded-full bg-[#0D121A] px-3 text-[12px] font-semibold text-[#FAFAFA] shadow-[inset_1.5px_1.5px_4.5px_rgba(0,0,0,0.7)] transition-opacity hover:opacity-80 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50"
+ className="inline-flex h-7 items-center gap-1.5 rounded-full bg-[#0D121A] px-3 text-[12px] font-semibold text-[#FAFAFA] shadow-[inset_1.5px_1.5px_4.5px_rgba(0,0,0,0.7)] transition-opacity hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#4BA0FA] focus-visible:ring-offset-2 focus-visible:ring-offset-[#1B1F24] cursor-pointer disabled:cursor-not-allowed disabled:opacity-50"
>
{settingsQuery.isFetching && (
-
+
)}
Try again
@@ -118,10 +106,10 @@ export function WorkspacePrompt() {
aria-labelledby={HEADING_ID}
aria-describedby={`${DESCRIPTION_ID} ${COUNTER_ID}`}
value={prompt}
- onChange={(event) => setPrompt(event.target.value)}
- placeholder="Add persistent guidance for how Company Brain should operate across your workspace..."
+ onChange={(event) => setDraft(event.target.value)}
+ placeholder="Describe operating preferences, priorities, source and tool choices, workflows, terminology, formatting, and communication style. Fixed safety, access, and approval constraints still apply."
maxLength={1500}
- className="min-h-[96px] w-full resize-y rounded-[12px] border border-white/[0.08] bg-[#0D121A] px-3.5 py-3 text-[13px] leading-relaxed text-[#FAFAFA] placeholder:text-[#525966] focus:border-white/[0.16] focus:outline-none"
+ className="min-h-[96px] w-full resize-none rounded-[12px] border border-white/[0.08] bg-[#0D121A] px-3.5 py-3 text-[13px] leading-relaxed text-[#FAFAFA] placeholder:text-[#525966] focus-visible:border-white/[0.16] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#4BA0FA] focus-visible:ring-offset-2 focus-visible:ring-offset-[#1B1F24]"
/>
diff --git a/apps/web/hooks/use-org-settings.ts b/apps/web/hooks/use-org-settings.ts
index cc643fc9..fa65b19f 100644
--- a/apps/web/hooks/use-org-settings.ts
+++ b/apps/web/hooks/use-org-settings.ts
@@ -11,10 +11,6 @@ export type OrgSettings = {
excludeItems?: string[] | null
}
-type OrgSettingsResponse = {
- settings?: Partial
-} & Partial
-
export function useOrgSettings() {
const { org } = useAuth()
const orgId = org?.id ?? ""
@@ -22,14 +18,11 @@ export function useOrgSettings() {
return useQuery({
queryKey: ["settings", "org", orgId],
queryFn: async (): Promise => {
- const response = await $fetch("@get/settings", {
- disableValidation: true,
- })
+ const response = await $fetch("@get/settings")
if (response.error) {
throw new Error(response.error.message || "Failed to load settings")
}
- const data = response.data as OrgSettingsResponse | null
- const settings = data?.settings ?? data ?? {}
+ const settings = response.data ?? {}
return {
shouldLLMFilter: settings.shouldLLMFilter ?? false,
filterPrompt: settings.filterPrompt ?? null,
@@ -63,7 +56,7 @@ export function useUpdateOrgSettings() {
onMutate: () => ({ orgId }),
onSuccess: async (data, _settings, mutationContext) => {
const queryKey = ["settings", "org", mutationContext.orgId] as const
- const canonicalSettings = data?.settings
+ const canonicalSettings = data?.updated
if (canonicalSettings) {
queryClient.setQueryData(queryKey, (current) =>
current ? { ...current, ...canonicalSettings } : current,
diff --git a/packages/lib/api.ts b/packages/lib/api.ts
index 6a3ed049..7cf8755f 100644
--- a/packages/lib/api.ts
+++ b/packages/lib/api.ts
@@ -29,16 +29,10 @@ import {
UpdateContainerTagSettingsRequestSchema,
} from "../validation/api"
-// Settings response schema - this is custom to console (not in shared validation)
-const SettingsResponseSchema = z.object({
- message: z.string(),
- settings: z.object({
- excludeItems: z.array(z.string().min(1).max(20)).nullable().optional(),
- filterPrompt: z.string().max(750).nullable().optional(),
- includeItems: z.array(z.string().min(1).max(20)).nullable().optional(),
- shouldLLMFilter: z.boolean().optional(),
- workspacePrompt: z.string().max(1500).nullable().optional(),
- }),
+const UpdateSettingsResponseSchema = z.object({
+ orgId: z.string(),
+ orgSlug: z.string(),
+ updated: SettingsRequestSchema,
})
// Analytics request schema - custom to console
@@ -196,11 +190,11 @@ export const apiSchema = createSchema({
// Settings operations
"@get/settings": {
- output: z.object({}).passthrough(),
+ output: SettingsRequestSchema,
},
"@patch/settings": {
input: SettingsRequestSchema,
- output: SettingsResponseSchema,
+ output: UpdateSettingsResponseSchema,
},
"@post/settings/reset": {
input: z.object({ confirmation: z.string() }),