Add feedback voting and thumbs capture flow

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
dotta 2026-04-02 09:11:49 -05:00
parent 3db6bdfc3c
commit c0d0d03bce
66 changed files with 18988 additions and 78 deletions

View file

@ -36,6 +36,10 @@ export const portabilityCompanyManifestEntrySchema = z.object({
brandColor: z.string().nullable(),
logoPath: z.string().nullable(),
requireBoardApprovalForNewAgents: z.boolean(),
feedbackDataSharingEnabled: z.boolean().default(false),
feedbackDataSharingConsentAt: z.string().datetime().nullable().default(null),
feedbackDataSharingConsentByUserId: z.string().nullable().default(null),
feedbackDataSharingTermsVersion: z.string().nullable().default(null),
});
export const portabilitySidebarOrderSchema = z.object({

View file

@ -3,6 +3,7 @@ import { COMPANY_STATUSES } from "../constants.js";
const logoAssetIdSchema = z.string().uuid().nullable().optional();
const brandColorSchema = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
const feedbackDataSharingTermsVersionSchema = z.string().min(1).nullable().optional();
export const createCompanySchema = z.object({
name: z.string().min(1),
@ -18,6 +19,10 @@ export const updateCompanySchema = createCompanySchema
status: z.enum(COMPANY_STATUSES).optional(),
spentMonthlyCents: z.number().int().nonnegative().optional(),
requireBoardApprovalForNewAgents: z.boolean().optional(),
feedbackDataSharingEnabled: z.boolean().optional(),
feedbackDataSharingConsentAt: z.coerce.date().nullable().optional(),
feedbackDataSharingConsentByUserId: z.string().min(1).nullable().optional(),
feedbackDataSharingTermsVersion: feedbackDataSharingTermsVersionSchema,
brandColor: brandColorSchema,
logoAssetId: logoAssetIdSchema,
});

View file

@ -0,0 +1,22 @@
import { z } from "zod";
import {
FEEDBACK_DATA_SHARING_PREFERENCES,
FEEDBACK_TARGET_TYPES,
FEEDBACK_TRACE_STATUSES,
FEEDBACK_VOTE_VALUES,
} from "../types/feedback.js";
export const feedbackTargetTypeSchema = z.enum(FEEDBACK_TARGET_TYPES);
export const feedbackTraceStatusSchema = z.enum(FEEDBACK_TRACE_STATUSES);
export const feedbackVoteValueSchema = z.enum(FEEDBACK_VOTE_VALUES);
export const feedbackDataSharingPreferenceSchema = z.enum(FEEDBACK_DATA_SHARING_PREFERENCES);
export const upsertIssueFeedbackVoteSchema = z.object({
targetType: feedbackTargetTypeSchema,
targetId: z.string().uuid(),
vote: feedbackVoteValueSchema,
reason: z.string().trim().max(1000).optional(),
allowSharing: z.boolean().optional(),
});
export type UpsertIssueFeedbackVote = z.infer<typeof upsertIssueFeedbackVoteSchema>;

View file

@ -24,6 +24,14 @@ export {
type UpdateCompany,
type UpdateCompanyBranding,
} from "./company.js";
export {
feedbackDataSharingPreferenceSchema,
feedbackTargetTypeSchema,
feedbackTraceStatusSchema,
feedbackVoteValueSchema,
upsertIssueFeedbackVoteSchema,
type UpsertIssueFeedbackVote,
} from "./feedback.js";
export {
companySkillSourceTypeSchema,
companySkillTrustLevelSchema,

View file

@ -1,7 +1,12 @@
import { z } from "zod";
import { DEFAULT_FEEDBACK_DATA_SHARING_PREFERENCE } from "../types/feedback.js";
import { feedbackDataSharingPreferenceSchema } from "./feedback.js";
export const instanceGeneralSettingsSchema = z.object({
censorUsernameInLogs: z.boolean().default(false),
feedbackDataSharingPreference: feedbackDataSharingPreferenceSchema.default(
DEFAULT_FEEDBACK_DATA_SHARING_PREFERENCE,
),
}).strict();
export const patchInstanceGeneralSettingsSchema = instanceGeneralSettingsSchema.partial();