import { Assessment, AssessmentComment, AssessmentCommentLevel, AssessmentCreateInput, AssessmentGroup, AssessmentQuestionInput, AssessmentQuestionMatch, AssessmentSubmitForReviewInput, AssessmentTemplate, AssessmentTemplateCreateInput, AssessmentTemplateExport, AssessmentUpdateInput, ListOptions, PaginatedResponse, ToolClients, ToolDefinition, TranscendGraphQLBase, z } from "@transcend-io/mcp-server-base"; import * as _$_transcend_io_privacy_types0 from "@transcend-io/privacy-types"; import { AssessmentFormStatus, AssessmentFormTemplateStatus, ScopeName } from "@transcend-io/privacy-types"; //#region src/tools/index.d.ts declare function getAssessmentTools(clients: ToolClients): ToolDefinition[]; //#endregion //#region src/scopes.d.ts /** OAuth scopes required for Assessment MCP tools (offline_access added by base). */ declare const ASSESSMENT_OAUTH_SCOPES: readonly [ScopeName.ViewAssessments, ScopeName.ViewAssignedAssessments, ScopeName.ManageAssessments, ScopeName.ManageAssignedAssessments]; //#endregion //#region src/graphql.d.ts /** Fields of `AssessmentFormFiltersInput` that `assessments_list` exposes. */ interface ListAssessmentsFilter { /** Restrict to these assessment form IDs */ ids?: string[]; /** Lifecycle statuses to include */ statuses?: string[]; /** Free-text match over assessment titles */ text?: string; /** Internal Transcend users the form is assigned to */ assigneeIds?: string[]; /** External (vendor) assignee email addresses */ externalAssigneeEmails?: string[]; /** Internal Transcend users reviewing the form */ reviewerIds?: string[]; /** * Groups the forms belong to. * * `AssessmentFormFiltersInput` also declares `templateIds`, and the server * rejects it — "assessmentFormTemplate is not associated to assessmentForm". * A form reaches its template only through its group, so resolve templates * with `listAssessmentGroups({ filterBy: { templateIds } })` and filter on * the group ids it returns. */ assessmentGroupIds?: string[]; /** * Created on or before this ISO 8601 date. * * The bounds are asymmetric, which is the API's behaviour and not a typo: * verified against `createdAt`, a row whose timestamp equals the bound is * included by `Before` and excluded by `After`. */ createdAtBefore?: string; /** Created strictly after this ISO 8601 date */ createdAtAfter?: string; /** Due on or before this ISO 8601 date */ dueDateBefore?: string; /** Due strictly after this ISO 8601 date */ dueDateAfter?: string; } /** Sortable columns on the assessment index, in `AssessmentFormRawOrderField` terms. */ type ListAssessmentsSortField = 'statusRank' | 'submittedAt' | 'title'; declare class AssessmentsMixin extends TranscendGraphQLBase { /** * Page the assessment index. `first`/`offset` map straight onto the query; * `hasNextPage` is derived because the payload carries no `pageInfo`. * * `includeDetails` gates the assignee, reviewer, date and lock fields so the * cheap listing stays cheap. */ listAssessments(options?: ListOptions & { /** Filters forwarded to `AssessmentFormFiltersInput` */filterBy?: ListAssessmentsFilter; /** Column to sort on; omit to keep the API default order */ sortField?: ListAssessmentsSortField; /** Sort direction, applied only alongside `sortField` */ sortDirection?: 'ASC' | 'DESC'; /** Fetch people, dates and lock state on each row */ includeDetails?: boolean; }): Promise>; /** * Section index for a form: metadata plus one row per section with a question * count, and no question bodies. This is the cheap read that lets a caller * decide which sections are worth expanding. */ getAssessmentSkeleton(id: string): Promise; /** * The questions on a form whose text matches `text`, with the form's section * index alongside them. * * Both halves come from one skeleton read: it yields the section ids the * search has to be scoped to, and the question ids that say which section * each match belongs to, since a question carries no reference back to its * section. Matches are drained rather than paged — they cannot outnumber the * questions on the form, and a caller searching for one topic should not have * to page to learn whether the form covers it. */ searchAssessmentQuestions(id: string, text: string, options?: { /** Restrict the search to these sections. Omit to search the whole form. */sectionIds?: string[]; }): Promise<{ /** The form's metadata and section index */form: Assessment; /** Matching questions, in section then question order */ matches: AssessmentQuestionMatch[]; /** How many questions the form has in the searched sections */ searchedCount: number; }>; /** * Full form contents, optionally narrowed to specific sections. `sectionIds` * filters after the fetch because neither `sections` nor `questions` accepts * pagination arguments in the API — the narrowing exists to bound what the * caller has to read, not what the server has to send. */ getAssessment(id: string, options?: { /** Restrict the returned sections to these IDs. Omit for every section. */sectionIds?: string[]; }): Promise; /** Comments left on the form as a whole, newest page first. */ listAssessmentFormComments(formId: string, options?: { first?: number; offset?: number; authorIds?: string[]; }): Promise<{ nodes: AssessmentComment[]; totalCount: number; }>; /** Comments left on specific sections of a form. */ listAssessmentSectionComments(sectionIds: string[], options?: { first?: number; offset?: number; authorIds?: string[]; }): Promise<{ nodes: AssessmentComment[]; totalCount: number; }>; /** * Every comment left on a question of this form, each carrying the question * it sits on. Unpaginated at the API — the nested `comments` field takes no * paging arguments — so callers page the merged result themselves. */ listAssessmentQuestionComments(formId: string): Promise<{ /** The comments, tagged with their question */nodes: AssessmentComment[]; /** Question title by question id, so a comment can name its question */ questionTitles: Record; /** Section id by question id, so a question comment can name its section */ questionSections: Record; /** Section title by section id, so a comment can name its section */ sectionTitles: Record; /** Sections of the form, so section comments can be read in the same pass */ sectionIds: string[]; }>; /** * How many comments sit at each level of a form, without fetching any of * them. Lets a form read say that feedback exists, and how much, for the * price of counts rather than bodies. */ countAssessmentComments(formId: string): Promise>; /** * Create a top-level comment or a threaded reply on a form, section, or * question. The three levels are separate mutations; `level` picks which one. */ createAssessmentComment(input: { /** Whether the comment hangs off the form, a section, or a question */level: AssessmentCommentLevel; /** ID of the form, section, or question the comment attaches to */ targetId: string; /** Body of the comment */ content: string; /** Parent comment id when this is a threaded reply */ parentCommentId?: string; }): Promise; /** * Rewrite the body of an existing comment. `targetId` is required for the * shared {@link AssessmentComment} shape — FORM and QUESTION update payloads * do not echo the anchor id, and SECTION does only via `assessmentSectionId`. */ updateAssessmentComment(input: { /** Whether the comment hangs off the form, a section, or a question */level: AssessmentCommentLevel; /** ID of the comment to edit */ commentId: string; /** New body of the comment */ content: string; /** * ID of the form, section, or question the comment hangs off. Required for * FORM and QUESTION responses; for SECTION the API returns it and this is * used only as a fallback. */ targetId?: string; }): Promise; /** * Mark a comment resolved or reopen it. Same level routing as create/update; * `targetId` is needed for FORM/QUESTION responses because those payloads do * not echo the anchor id. */ resolveAssessmentComment(input: { /** Whether the comment hangs off the form, a section, or a question */level: AssessmentCommentLevel; /** ID of the comment to resolve or reopen */ commentId: string; /** True to mark resolved, false to reopen */ isResolved: boolean; /** * ID of the form, section, or question the comment hangs off. Required for * FORM and QUESTION responses; for SECTION the API returns it and this is * used only as a fallback. */ targetId?: string; }): Promise; selectAssessmentQuestionAnswers(input: { assessmentQuestionId: string; assessmentAnswerIds?: string[]; assessmentAnswerValues?: { value: string; isUserCreated: boolean; }[]; }): Promise>; updateAssessmentFormAssignees(input: { id: string; assigneeIds?: string[]; externalAssigneeEmails?: string[]; }): Promise<{ id: string; title: string; status: string; }>; /** * Page the group index. Like `assessmentForms`, `AssessmentGroupsPayload` * carries no `pageInfo`, so `hasNextPage` is derived from the offset. */ listAssessmentGroups(options?: ListOptions & { /** Filters forwarded to `AssessmentGroupFiltersInput` */filterBy?: { /** Free-text match over group titles */text?: string; /** Restrict to these group IDs */ ids?: string[]; /** Restrict to groups built from these templates */ templateIds?: string[]; }; }): Promise>; createAssessmentGroup(input: { title: string; assessmentFormTemplateId: string; description?: string; isTriggerEnabled?: boolean; reviewerIds?: string[]; }): Promise<{ id: string; title: string; }>; createAssessment(input: AssessmentCreateInput): Promise; updateAssessment(input: AssessmentUpdateInput): Promise; /** * Page the template index. Same derived `hasNextPage` as the other assessment * lists, since `AssessmentFormTemplatesPayload` carries no `pageInfo`. */ listAssessmentTemplates(options?: ListOptions & { /** Filters forwarded to `AssessmentFormTemplateFiltersInput` */filterBy?: { /** Restrict to these template IDs */ids?: string[]; /** Free-text match over template titles and descriptions */ text?: string; /** Publication statuses to include */ statuses?: string[]; }; }): Promise>; submitAssessmentForReview(input: AssessmentSubmitForReviewInput): Promise; createAssessmentFormTemplate(input: AssessmentTemplateCreateInput): Promise<{ id: string; title: string; status: string; }>; createAssessmentSection(input: { assessmentFormTemplateId: string; title: string; questions?: AssessmentQuestionInput[]; }): Promise<{ id: string; title: string; index: number; }>; createAssessmentQuestions(assessmentSectionId: string, questions: AssessmentQuestionInput[]): Promise>; getAssessmentFormTemplate(templateId: string): Promise; } //#endregion //#region src/helpers/buildAssessmentLinks.d.ts /** Inputs to {@link buildAssessmentLinks}. */ interface BuildAssessmentLinksInput { /** Base admin-dashboard URL (e.g. `https://app.transcend.io`) */ dashboardUrl: string; /** The assessment form ID */ assessmentFormId: string; } /** Deep link into the Transcend admin dashboard for a given assessment. */ interface AssessmentLinks { /** Read-only response page for the assessment. */ url: string; } /** * Build the canonical admin-dashboard deep link for an assessment. * * Always points at `/assessments/forms/:id/response`, mirroring the * dashboard's own "View Responses" row action. The fillable * `/assessments/forms/:id/view` route is intentionally not emitted — * it only resolves for the form's assignee, which the MCP can't verify. */ declare function buildAssessmentLinks({ dashboardUrl, assessmentFormId }: BuildAssessmentLinksInput): AssessmentLinks; /** Build a link to the assessment-group page (for group-level tools). */ declare function buildAssessmentGroupUrl(dashboardUrl: string, assessmentGroupId: string): string; //#endregion //#region src/tools/assessments_add_section.d.ts declare const AddSectionSchema: z.ZodObject<{ templateId: z.ZodString; title: z.ZodString; questions: z.ZodOptional>>; }, z.core.$strip>; type AddSectionInput = z.infer; //#endregion //#region src/tools/assessments_answer_question.d.ts declare const AnswerQuestionValueSchema: z.ZodObject<{ value: z.ZodString; isUserCreated: z.ZodBoolean; }, z.core.$strip>; type AnswerQuestionValueInput = z.infer; declare const AnswerQuestionSchema: z.ZodObject<{ assessmentQuestionId: z.ZodString; assessmentAnswerIds: z.ZodOptional>; assessmentAnswerValues: z.ZodOptional>>; }, z.core.$strip>; type AnswerQuestionInput = z.infer; //#endregion //#region src/tools/assessments_create.d.ts declare const CreateAssessmentSchema: z.ZodObject<{ title: z.ZodString; assessmentGroupId: z.ZodString; assigneeIds: z.ZodOptional>; }, z.core.$strip>; type CreateAssessmentInput = z.infer; //#endregion //#region src/tools/assessments_create_group.d.ts declare const CreateGroupSchema: z.ZodObject<{ title: z.ZodString; templateId: z.ZodString; description: z.ZodOptional; reviewerIds: z.ZodOptional>; }, z.core.$strip>; type CreateGroupInput = z.infer; //#endregion //#region src/tools/assessments_create_template.d.ts declare const CreateTemplateSchema: z.ZodObject<{ title: z.ZodString; description: z.ZodOptional; status: z.ZodOptional>; sections: z.ZodOptional>>; }, z.core.$strip>; type CreateTemplateInput = z.infer; //#endregion //#region src/tools/assessments_export_template.d.ts declare const ExportTemplateSchema: z.ZodObject<{ templateId: z.ZodString; }, z.core.$strip>; type ExportTemplateInput = z.infer; //#endregion //#region src/tools/assessments_get.d.ts declare const GetAssessmentSchema: z.ZodObject<{ assessmentId: z.ZodString; sectionIds: z.ZodOptional>; questionText: z.ZodOptional; }, z.core.$strip>; type GetAssessmentInput = z.infer; //#endregion //#region src/tools/assessments_list_comments.d.ts declare const ListAssessmentCommentsSchema: z.ZodObject<{ assessmentId: z.ZodString; authorIds: z.ZodOptional>; resolution: z.ZodDefault>>; levels: z.ZodOptional>>; limit: z.ZodDefault>>; offset: z.ZodDefault>>; }, z.core.$strip>; type ListAssessmentCommentsInput = z.infer; //#endregion //#region src/tools/assessments_write_comment.d.ts declare const WriteAssessmentCommentSchema: z.ZodObject<{ assessmentId: z.ZodString; content: z.ZodOptional; level: z.ZodEnum<{ FORM: "FORM"; SECTION: "SECTION"; QUESTION: "QUESTION"; }>; targetId: z.ZodOptional; parentCommentId: z.ZodOptional; commentId: z.ZodOptional; resolved: z.ZodOptional; }, z.core.$strip>; type WriteAssessmentCommentInput = z.infer; //#endregion //#region src/tools/assessments_list.d.ts declare const AssessmentStatusEnum: z.ZodEnum; type AssessmentStatusEnumInput = z.infer; declare const ListAssessmentsSchema: z.ZodObject<{ statuses: z.ZodOptional>>; text: z.ZodOptional; ids: z.ZodOptional>; assigneeIds: z.ZodOptional>; reviewerIds: z.ZodOptional>; externalAssigneeEmails: z.ZodOptional>; assessmentGroupIds: z.ZodOptional>; createdAfter: z.ZodOptional; createdBefore: z.ZodOptional; dueAfter: z.ZodOptional; dueBefore: z.ZodOptional; sortBy: z.ZodOptional>; sortDirection: z.ZodDefault>>; includeDetails: z.ZodDefault>; limit: z.ZodDefault>>; offset: z.ZodDefault>>; }, z.core.$strip>; type ListAssessmentsInput = z.infer; //#endregion //#region src/tools/assessments_list_groups.d.ts declare const ListGroupsSchema: z.ZodObject<{ limit: z.ZodDefault>>; offset: z.ZodDefault>>; text: z.ZodOptional; ids: z.ZodOptional>; templateIds: z.ZodOptional>; }, z.core.$strip>; type ListGroupsInput = z.infer; //#endregion //#region src/tools/assessments_list_templates.d.ts declare const ListTemplatesSchema: z.ZodObject<{ limit: z.ZodDefault>>; offset: z.ZodDefault>>; text: z.ZodOptional; ids: z.ZodOptional>; statuses: z.ZodOptional>>; }, z.core.$strip>; type ListTemplatesInput = z.infer; //#endregion //#region src/tools/assessments_prefill.d.ts declare const PrefillSchema: z.ZodObject<{ title: z.ZodString; assessmentGroupId: z.ZodString; answers: z.ZodRecord]>>; assigneeIds: z.ZodOptional>; assigneeEmails: z.ZodOptional>; reviewerIds: z.ZodOptional>; includeDetails: z.ZodDefault>; submitForReview: z.ZodOptional; }, z.core.$strip>; type PrefillInput = z.infer; //#endregion //#region src/tools/assessments_submit_response.d.ts declare const SubmitResponseSchema: z.ZodObject<{ assessmentId: z.ZodString; assessmentSectionIds: z.ZodArray; }, z.core.$strip>; type SubmitResponseInput = z.infer; //#endregion //#region src/tools/assessments_update.d.ts declare const UpdateAssessmentSchema: z.ZodObject<{ assessmentId: z.ZodString; title: z.ZodOptional; description: z.ZodOptional; reviewerIds: z.ZodOptional>; dueDate: z.ZodOptional; status: z.ZodOptional>; }, z.core.$strip>; type UpdateAssessmentInput = z.infer; //#endregion //#region src/tools/assessments_update_assignees.d.ts declare const UpdateAssigneesSchema: z.ZodObject<{ assessmentId: z.ZodString; assigneeIds: z.ZodOptional>; externalAssigneeEmails: z.ZodOptional>; }, z.core.$strip>; type UpdateAssigneesInput = z.infer; //#endregion export { ASSESSMENT_OAUTH_SCOPES, type AddSectionInput, AddSectionSchema, type AnswerQuestionInput, AnswerQuestionSchema, type AnswerQuestionValueInput, AnswerQuestionValueSchema, type AssessmentLinks, AssessmentStatusEnum, type AssessmentStatusEnumInput, AssessmentsMixin, type BuildAssessmentLinksInput, type CreateAssessmentInput, CreateAssessmentSchema, type CreateGroupInput, CreateGroupSchema, type CreateTemplateInput, CreateTemplateSchema, type ExportTemplateInput, ExportTemplateSchema, type GetAssessmentInput, GetAssessmentSchema, type ListAssessmentCommentsInput, ListAssessmentCommentsSchema, type ListAssessmentsInput, ListAssessmentsSchema, type ListGroupsInput, ListGroupsSchema, type ListTemplatesInput, ListTemplatesSchema, type PrefillInput, PrefillSchema, type SubmitResponseInput, SubmitResponseSchema, type UpdateAssessmentInput, UpdateAssessmentSchema, type UpdateAssigneesInput, UpdateAssigneesSchema, type WriteAssessmentCommentInput, WriteAssessmentCommentSchema, buildAssessmentGroupUrl, buildAssessmentLinks, getAssessmentTools }; //# sourceMappingURL=index.d.mts.map