@mtaap/mcp 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts","../../../packages/db/dist/index.js","../../../packages/db/dist/client.js","../../../packages/core/dist/constants/enums.js","../../../packages/core/dist/constants/state-machine.js","../../../packages/core/dist/version.js","../../../packages/core/dist/config/index.js","../../../packages/core/dist/types/index.js","../../../packages/core/dist/validation/index.js","../../../packages/core/dist/logging/metrics.js","../../../packages/core/dist/logging/performance-monitor.js","../../../packages/core/dist/logging/error-tracker.js","../../../packages/auth/dist/api-key.js","../src/version.ts","../../../packages/git/dist/github.js","../../../packages/git/dist/errors.js","../src/permissions.ts"],"sourcesContent":["import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { validateApiKey } from \"@mtaap/auth/api-key\";\nimport { prisma, Prisma } from \"@mtaap/db\";\nimport { VERSION } from \"./version.js\";\nimport {\n TaskState,\n ErrorType,\n ProjectType,\n ProjectOrigin,\n ApiKeyPermission,\n} from \"@mtaap/core\";\nimport { GitHubProvider } from \"@mtaap/git/core\";\nimport { assertApiKeyPermission } from \"./permissions.js\";\nimport {\n ListProjectsInputSchema,\n ListTasksInputSchema,\n GetTaskInputSchema,\n AssignTaskInputSchema,\n UpdateProgressInputSchema,\n CompleteTaskInputSchema,\n ReportErrorInputSchema,\n GetProjectContextInputSchema,\n AddNoteInputSchema,\n AbandonTaskInputSchema,\n CreatePersonalProjectInputSchema,\n} from \"@mtaap/core\";\n\nasync function getAuthenticatedUser(apiKey: string) {\n const result = await validateApiKey(apiKey);\n\n if (!result) {\n throw new Error(\"Invalid API key\");\n }\n\n return {\n userId: result.user.id,\n organizationId: result.organization?.id,\n apiKey: result.apiKey,\n };\n}\n\nasync function ensureAccessControl(\n projectId: string,\n userId: string,\n organizationId: string | null,\n): Promise<void> {\n if (!organizationId) {\n const project = await prisma.project.findUnique({\n where: { id: projectId },\n include: { owner: true },\n });\n\n if (project?.ownerId !== userId) {\n throw new Error(\n \"Access denied: You do not have permission to access this project\",\n );\n }\n } else {\n const project = await prisma.project.findUnique({\n where: { id: projectId },\n include: { organization: true },\n });\n\n if (!project || project.organizationId !== organizationId) {\n throw new Error(\n \"Access denied: You do not have permission to access this project\",\n );\n }\n\n const userTags = await prisma.userTag.findMany({\n where: { userId },\n include: { tag: true },\n });\n\n const projectTags = await prisma.projectTag.findMany({\n where: { projectId },\n include: { tag: true },\n });\n\n const userTagNames = new Set(\n userTags.map((ut: { tag: { name: string } }) => ut.tag.name),\n );\n const projectTagNames = new Set(\n projectTags.map((pt: { tag: { name: string } }) => pt.tag.name),\n );\n\n const hasAccess = [...userTagNames].some((tag) => projectTagNames.has(tag));\n\n if (!hasAccess) {\n throw new Error(\n \"Access denied: Your tags do not grant access to this project\",\n );\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nasync function verifyPersonalAccess(\n projectId: string,\n userId: string,\n): Promise<void> {\n const project = await prisma.project.findUnique({\n where: { id: projectId },\n include: {\n collaborators: {\n where: { userId },\n },\n },\n });\n\n if (!project) {\n throw new Error(\"Project not found\");\n }\n\n const isOwner = project.ownerId === userId;\n const isCollaborator = project.collaborators.length > 0;\n\n if (!isOwner && !isCollaborator) {\n throw new Error(\n \"Access denied: You do not have permission to access this project\",\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction getGitHubClient(_organizationId: string): GitHubProvider {\n const githubToken = process.env.GITHUB_TOKEN;\n\n if (!githubToken) {\n throw new Error(\"GitHub token not configured\");\n }\n\n return new GitHubProvider(githubToken);\n}\n\nfunction slugify(text: string, maxLength = 50): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .substring(0, maxLength);\n}\n\nexport async function createMCPServer() {\n const server = new McpServer({\n name: \"mtaap\",\n version: VERSION,\n });\n\n const apiKey = process.env.MTAAP_API_KEY;\n\n if (!apiKey) {\n throw new Error(\"MTAAP_API_KEY environment variable is required\");\n }\n\n const auth = await getAuthenticatedUser(apiKey);\n\n server.registerTool(\n \"list_projects\",\n {\n description: \"List accessible projects (personal + team via tags)\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.READ,\n \"list_projects\",\n );\n const validated = ListProjectsInputSchema.parse(args);\n const projects = await listProjects(\n auth.userId,\n auth.organizationId,\n validated.workspaceType,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(projects, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"list_tasks\",\n {\n description: \"Returns available tasks (filterable by project, state)\",\n },\n async (args) => {\n assertApiKeyPermission(auth.apiKey, ApiKeyPermission.READ, \"list_tasks\");\n const validated = ListTasksInputSchema.parse(args);\n if (validated.projectId) {\n await ensureAccessControl(\n validated.projectId,\n auth.userId,\n auth.organizationId,\n );\n }\n const tasks = await listTasks(\n auth.userId,\n auth.organizationId,\n validated.projectId,\n validated.state,\n validated.assigneeId,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(tasks, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_task\",\n {\n description: \"Full task details including acceptance criteria\",\n },\n async (args) => {\n assertApiKeyPermission(auth.apiKey, ApiKeyPermission.READ, \"get_task\");\n const validated = GetTaskInputSchema.parse(args);\n const task = await getTaskWithChecks(\n validated.taskId,\n auth.userId,\n auth.organizationId,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(task, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"assign_task\",\n {\n description: \"Atomic claim → creates branch. Fails if already taken.\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.WRITE,\n \"assign_task\",\n );\n const validated = AssignTaskInputSchema.parse(args);\n const result = await assignTask(\n validated.projectId,\n validated.taskId,\n auth.userId,\n auth.organizationId,\n validated.expectedState,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"update_progress\",\n {\n description: \"Reports status, updates checkboxes, writes checkpoint\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.WRITE,\n \"update_progress\",\n );\n const validated = UpdateProgressInputSchema.parse(args);\n const result = await updateProgress(\n validated.taskId,\n auth.userId,\n validated.statusMessage,\n validated.completedCheckpointIds,\n validated.currentCheckpointIndex,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"complete_task\",\n {\n description: \"Marks complete, triggers PR, deletes local state file\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.WRITE,\n \"complete_task\",\n );\n const validated = CompleteTaskInputSchema.parse(args);\n const result = await completeTask(\n validated.projectId,\n validated.taskId,\n auth.userId,\n auth.organizationId,\n validated.pullRequestTitle,\n validated.pullRequestBody,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"check_active_task\",\n {\n description: \"Check for resumable task in .mtaap/active-task.json\",\n },\n async () => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.READ,\n \"check_active_task\",\n );\n const result = await checkActiveTask();\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"report_error\",\n {\n description: \"Report unrecoverable error, displays on task in webapp\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.WRITE,\n \"report_error\",\n );\n const validated = ReportErrorInputSchema.parse(args);\n const result = await reportTaskError(\n validated.taskId,\n auth.userId,\n validated.errorType,\n validated.errorMessage,\n validated.context,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_project_context\",\n {\n description: \"Returns assembled context (README, stack, conventions)\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.READ,\n \"get_project_context\",\n );\n const validated = GetProjectContextInputSchema.parse(args);\n await ensureAccessControl(\n validated.projectId,\n auth.userId,\n auth.organizationId,\n );\n const context = await getProjectContext(validated.projectId);\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(context, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"add_note\",\n {\n description: \"Append implementation notes to task\",\n },\n async (args) => {\n assertApiKeyPermission(auth.apiKey, ApiKeyPermission.WRITE, \"add_note\");\n const validated = AddNoteInputSchema.parse(args);\n const result = await addTaskNote(\n validated.taskId,\n auth.userId,\n validated.content,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"abandon_task\",\n {\n description: \"Unassign from a task and optionally delete the branch\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.WRITE,\n \"abandon_task\",\n );\n const validated = AbandonTaskInputSchema.parse(args);\n\n // Validate project access\n await ensureAccessControl(\n validated.projectId,\n auth.userId,\n auth.organizationId || null,\n );\n\n const result = await abandonTask(\n validated.taskId,\n validated.projectId,\n auth.userId,\n validated.deleteBranch,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"create_personal_project\",\n {\n description: \"Create project in user's personal workspace\",\n },\n async (args) => {\n assertApiKeyPermission(\n auth.apiKey,\n ApiKeyPermission.WRITE,\n \"create_personal_project\",\n );\n const validated = CreatePersonalProjectInputSchema.parse(args);\n const result = await createPersonalProject(\n auth.userId,\n validated.name,\n validated.description,\n validated.repositoryUrl,\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n },\n );\n\n server.registerTool(\n \"get_version\",\n {\n description: \"Get the current MTAAP version\",\n },\n async () => {\n assertApiKeyPermission(auth.apiKey, ApiKeyPermission.READ, \"get_version\");\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n version: VERSION,\n timestamp: new Date().toISOString(),\n },\n null,\n 2,\n ),\n },\n ],\n };\n },\n );\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nasync function listProjects(\n userId: string,\n organizationId: string | null,\n workspaceType: string = \"ALL\",\n) {\n const where: Prisma.ProjectWhereInput = {};\n const include: Prisma.ProjectInclude = {};\n\n if (workspaceType === \"PERSONAL\" || workspaceType === \"ALL\") {\n where.ownerId = userId;\n include.owner = true;\n }\n\n if (organizationId && (workspaceType === \"TEAM\" || workspaceType === \"ALL\")) {\n where.OR = [\n { organizationId },\n { type: ProjectType.PERSONAL, ownerId: userId },\n ];\n include.organization = true;\n include.projectTags = {\n include: { tag: true },\n };\n }\n\n const projects = await prisma.project.findMany({\n where,\n include,\n orderBy: { updatedAt: \"desc\" },\n });\n\n const formattedProjects = projects.map(\n (project: (typeof projects)[number]) => ({\n id: project.id,\n name: project.name,\n description: project.description,\n type: project.type,\n origin: project.origin,\n repositoryUrl: project.repositoryUrl,\n baseBranch: project.baseBranch,\n tags:\n (\n project as unknown as { projectTags?: Array<{ tag: { name: string } }> }\n ).projectTags?.map((pt) => pt.tag.name) || [],\n createdAt: project.createdAt,\n updatedAt: project.updatedAt,\n }),\n );\n\n return formattedProjects;\n}\n\nasync function listTasks(\n userId: string,\n organizationId: string | null,\n projectId: string | undefined,\n state: TaskState | undefined,\n assigneeId: string | undefined,\n) {\n const where: Prisma.TaskWhereInput = { projectId };\n\n if (organizationId) {\n where.project = {\n organizationId,\n };\n }\n\n if (state) {\n where.state = state;\n }\n\n if (assigneeId) {\n where.assigneeId = assigneeId;\n }\n\n const tasks = await prisma.task.findMany({\n where,\n include: {\n project: true,\n assignee: true,\n creator: true,\n epic: true,\n },\n orderBy: { createdAt: \"desc\" },\n });\n\n const formattedTasks = await Promise.all(\n tasks.map(async (task: (typeof tasks)[number]) => {\n const acceptanceCriteria = await prisma.acceptanceCriterion.findMany({\n where: { taskId: task.id },\n orderBy: { order: \"asc\" },\n });\n\n return {\n id: task.id,\n projectId: task.projectId,\n projectName: task.project?.name || \"Unknown\",\n epicId: task.epicId,\n epicName: task.epic?.name || null,\n title: task.title,\n description: task.description,\n state: task.state,\n priority: task.priority,\n assigneeId: task.assigneeId,\n assigneeName: task.assignee?.name || null,\n assigneeEmail: task.assignee?.email || null,\n createdBy: task.createdBy,\n createdByName: task.creator?.name || null,\n assignedAt: task.assignedAt,\n startedAt: task.startedAt,\n completedAt: task.completedAt,\n branchName: task.branchName,\n pullRequestUrl: task.pullRequestUrl,\n pullRequestNumber: task.pullRequestNumber,\n errorType: task.errorType,\n errorMessage: task.errorMessage,\n acceptanceCriteria: acceptanceCriteria.map((ac: (typeof acceptanceCriteria)[number]) => ({\n id: ac.id,\n description: ac.description,\n completed: ac.completed,\n completedAt: ac.completedAt,\n order: ac.order,\n })),\n createdAt: task.createdAt,\n updatedAt: task.updatedAt,\n };\n }),\n );\n\n return formattedTasks;\n}\n\nasync function getTaskWithChecks(\n taskId: string,\n userId: string,\n organizationId: string | null,\n) {\n const task = await prisma.task.findUnique({\n where: { id: taskId },\n include: {\n project: {\n include: {\n organization: true,\n projectTags: {\n include: { tag: true },\n },\n },\n },\n epic: true,\n assignee: true,\n creator: true,\n acceptanceCriteria: {\n orderBy: { order: \"asc\" },\n },\n progressUpdates: {\n orderBy: { createdAt: \"desc\" },\n take: 10,\n },\n notes: {\n orderBy: { createdAt: \"desc\" },\n take: 10,\n },\n },\n });\n\n if (!task) {\n throw new Error(\"Task not found\");\n }\n\n if (organizationId && task.project?.organizationId !== organizationId) {\n const userTags = await prisma.userTag.findMany({\n where: { userId },\n include: { tag: true },\n });\n\n const projectTagNames = new Set(\n task.project.projectTags?.map(\n (pt: { tag: { name: string } }) => pt.tag.name,\n ) || [],\n );\n const userTagNames = new Set(\n userTags.map((ut: { tag: { name: string } }) => ut.tag.name),\n );\n\n const hasAccess = [...userTagNames].some((tag) => projectTagNames.has(tag));\n\n if (!hasAccess) {\n throw new Error(\n \"Access denied: Your tags do not grant access to this project\",\n );\n }\n }\n\n const formattedTask = {\n id: task.id,\n projectId: task.projectId,\n projectName: task.project?.name || \"Unknown\",\n epicId: task.epicId,\n epicName: task.epic?.name || null,\n title: task.title,\n description: task.description,\n state: task.state,\n priority: task.priority,\n assigneeId: task.assigneeId,\n assigneeName: task.assignee?.name || null,\n assigneeEmail: task.assignee?.email || null,\n createdBy: task.createdBy,\n createdByName: task.creator?.name || null,\n assignedAt: task.assignedAt,\n startedAt: task.startedAt,\n completedAt: task.completedAt,\n branchName: task.branchName,\n pullRequestUrl: task.pullRequestUrl,\n pullRequestNumber: task.pullRequestNumber,\n errorType: task.errorType,\n errorMessage: task.errorMessage,\n acceptanceCriteria: task.acceptanceCriteria.map(\n (ac: (typeof task.acceptanceCriteria)[number]) => ({\n id: ac.id,\n description: ac.description,\n completed: ac.completed,\n completedAt: ac.completedAt,\n order: ac.order,\n }),\n ),\n progressUpdates: task.progressUpdates.map(\n (pu: (typeof task.progressUpdates)[number]) => ({\n id: pu.id,\n message: pu.message,\n checkpoints: pu.checkpoints,\n userId: pu.userId,\n createdAt: pu.createdAt,\n }),\n ),\n notes: task.notes.map((note: (typeof task.notes)[number]) => ({\n id: note.id,\n content: note.content,\n userId: note.userId,\n createdAt: note.createdAt,\n })),\n createdAt: task.createdAt,\n updatedAt: task.updatedAt,\n };\n\n return formattedTask;\n}\n\nasync function assignTask(\n projectId: string,\n taskId: string,\n userId: string,\n organizationId: string | null,\n expectedState = TaskState.READY,\n) {\n await ensureAccessControl(projectId, userId, organizationId);\n\n const task = await prisma.task.findUnique({\n where: { id: taskId },\n include: { project: true },\n });\n\n if (!task) {\n throw new Error(\"Task not found\");\n }\n\n if (task.state !== expectedState) {\n return {\n success: false,\n taskId,\n currentState: task.state,\n message: `Task is already in state: ${task.state}`,\n };\n }\n\n const repoInfo = GitHubProvider.parseRepositoryUrl(\n task.project?.repositoryUrl || \"\",\n );\n\n if (!repoInfo) {\n throw new Error(\"Invalid repository URL\");\n }\n\n const github = getGitHubClient(task.project?.organizationId || \"\");\n const branchSuffix = slugify(task.title);\n const branchName = `feature/${taskId}-${branchSuffix}`;\n\n const createResult = await github.createBranch({\n owner: repoInfo.owner,\n repo: repoInfo.repo,\n sourceBranch: task.project?.baseBranch || \"develop\",\n newBranch: branchName,\n });\n\n if (!createResult.success) {\n throw new Error(`Failed to create branch: ${createResult.error}`);\n }\n\n const updatedTask = await prisma.task.update({\n where: { id: taskId },\n data: {\n state: TaskState.IN_PROGRESS,\n assigneeId: userId,\n assignedAt: new Date(),\n branchName,\n startedAt: new Date(),\n },\n });\n\n return {\n success: true,\n taskId: updatedTask.id,\n branchName,\n };\n}\n\nasync function updateProgress(\n taskId: string,\n userId: string,\n statusMessage: string | undefined,\n completedCheckpointIds: string[] | undefined,\n _currentCheckpointIndex: number | undefined,\n) {\n const task = await prisma.task.findUnique({\n where: { id: taskId },\n });\n\n if (!task) {\n throw new Error(\"Task not found\");\n }\n\n if (task.assigneeId !== userId) {\n throw new Error(\"You are not assigned to this task\");\n }\n\n if (completedCheckpointIds && completedCheckpointIds.length > 0) {\n await prisma.acceptanceCriterion.updateMany({\n where: {\n id: { in: completedCheckpointIds },\n },\n data: {\n completed: true,\n completedAt: new Date(),\n },\n });\n }\n\n if (statusMessage) {\n await prisma.progressUpdate.create({\n data: {\n taskId,\n userId,\n message: statusMessage,\n checkpoints: [],\n },\n });\n }\n\n const updatedTask = await prisma.task.update({\n where: { id: taskId },\n data: {\n updatedAt: new Date(),\n },\n });\n\n return {\n success: true,\n taskId: updatedTask.id,\n };\n}\n\nasync function completeTask(\n projectId: string,\n taskId: string,\n userId: string,\n organizationId: string | null,\n pullRequestTitle: string | undefined,\n pullRequestBody: string | undefined,\n) {\n await ensureAccessControl(projectId, userId, organizationId);\n\n const task = await prisma.task.findUnique({\n where: { id: taskId },\n include: { project: true },\n });\n\n if (!task) {\n throw new Error(\"Task not found\");\n }\n\n if (task.assigneeId !== userId) {\n throw new Error(\"You are not assigned to this task\");\n }\n\n if (task.state !== TaskState.IN_PROGRESS) {\n throw new Error(\"Task must be in progress to be completed\");\n }\n\n if (!task.branchName) {\n throw new Error(\"Task has no associated branch\");\n }\n\n const repoInfo = GitHubProvider.parseRepositoryUrl(\n task.project?.repositoryUrl || \"\",\n );\n\n if (!repoInfo) {\n throw new Error(\"Invalid repository URL\");\n }\n\n const github = getGitHubClient(task.project?.organizationId || \"\");\n const acceptanceCriteria = await prisma.acceptanceCriterion.findMany({\n where: { taskId },\n orderBy: { order: \"asc\" },\n });\n\n const acceptanceChecklist = acceptanceCriteria\n .map(\n (ac: (typeof acceptanceCriteria)[number]) =>\n `- [${ac.completed ? \"x\" : \" \"}] ${ac.description}`,\n )\n .join(\"\\n\");\n\n const prTitle = pullRequestTitle || `[${taskId}] ${task.title}`;\n const prBody =\n pullRequestBody ||\n `${task.description}\\n\\n### Acceptance Criteria\\n\\n${acceptanceChecklist}`;\n\n const createResult = await github.createPR({\n owner: repoInfo.owner,\n repo: repoInfo.repo,\n title: prTitle,\n body: prBody,\n head: task.branchName,\n base: task.project?.baseBranch || \"develop\",\n });\n\n if (!createResult.success) {\n throw new Error(`Failed to create PR: ${createResult.error}`);\n }\n\n const updatedTask = await prisma.task.update({\n where: { id: taskId },\n data: {\n state: TaskState.REVIEW,\n completedAt: new Date(),\n pullRequestUrl: createResult.prUrl,\n pullRequestNumber: createResult.prNumber,\n },\n });\n\n return {\n success: true,\n taskId: updatedTask.id,\n prUrl: createResult.prUrl,\n prNumber: createResult.prNumber,\n };\n}\n\nasync function checkActiveTask() {\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n\n const activeTaskPath = path.join(process.cwd(), \".mtaap\", \"active-task.json\");\n\n if (!(await fs.promises.access(activeTaskPath).catch(() => false))) {\n return {\n hasActiveTask: false,\n task: null,\n };\n }\n\n const content = await fs.promises.readFile(activeTaskPath, \"utf-8\");\n const activeTask = JSON.parse(content);\n\n return {\n hasActiveTask: true,\n task: activeTask,\n };\n}\n\nasync function reportTaskError(\n taskId: string,\n userId: string,\n errorType: ErrorType,\n errorMessage: string,\n _context: string | undefined,\n) {\n const task = await prisma.task.findUnique({\n where: { id: taskId },\n });\n\n if (!task) {\n throw new Error(\"Task not found\");\n }\n\n if (task.assigneeId !== userId) {\n throw new Error(\"You are not assigned to this task\");\n }\n\n const updatedTask = await prisma.task.update({\n where: { id: taskId },\n data: {\n errorType,\n errorMessage,\n },\n });\n\n return {\n success: true,\n taskId: updatedTask.id,\n };\n}\n\nasync function getProjectContext(projectId: string) {\n const project = await prisma.project.findUnique({\n where: { id: projectId },\n include: {\n organization: {\n include: { settings: true },\n },\n },\n });\n\n if (!project) {\n throw new Error(\"Project not found\");\n }\n\n const repoInfo = GitHubProvider.parseRepositoryUrl(project.repositoryUrl);\n\n let readme = \"\";\n let stack: string[] = [];\n\n if (repoInfo) {\n const github = getGitHubClient(project.organizationId || \"\");\n const readmeResult = await github.getRepositoryReadme(\n repoInfo.owner,\n repoInfo.repo,\n );\n\n readme = readmeResult || \"No README found\";\n\n const packageJsonResult = await github.getRepositoryPackageJson(\n repoInfo.owner,\n repoInfo.repo,\n );\n if (packageJsonResult) {\n const packageJson = JSON.parse(packageJsonResult);\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n stack = Object.keys(deps).slice(0, 20);\n }\n }\n\n const recentCompletedTasks = await prisma.task.findMany({\n where: {\n project: {\n id: projectId,\n },\n state: TaskState.DONE,\n },\n orderBy: { completedAt: \"desc\" },\n take: 10,\n include: {\n creator: {\n select: { id: true, name: true },\n },\n },\n });\n\n const conventions = {\n branchPrefix: \"feature/\",\n commitFormat: project.organization?.settings?.enforceConventionalCommits\n ? \"conventional\"\n : \"none\",\n testCommand: \"npm test\",\n baseBranch: project.baseBranch || \"develop\",\n notes:\n project.organization?.settings?.maxPersonalProjectsPerUser?.toString() ||\n \"\",\n };\n\n return {\n readme: readme.substring(0, 2000),\n stack,\n recentCompleted: recentCompletedTasks.map(\n (task: (typeof recentCompletedTasks)[number]) => ({\n id: task.id,\n title: task.title,\n completedAt: task.completedAt,\n }),\n ),\n conventions,\n };\n}\n\nasync function addTaskNote(taskId: string, userId: string, content: string) {\n const task = await prisma.task.findUnique({\n where: { id: taskId },\n });\n\n if (!task) {\n throw new Error(\"Task not found\");\n }\n\n if (task.assigneeId !== userId) {\n throw new Error(\"You are not assigned to this task\");\n }\n\n const note = await prisma.taskNote.create({\n data: {\n taskId,\n userId,\n content,\n },\n });\n\n return {\n success: true,\n noteId: note.id,\n };\n}\n\nasync function abandonTask(\n taskId: string,\n projectId: string,\n userId: string,\n deleteBranch?: boolean,\n) {\n const task = await prisma.task.findUnique({\n where: { id: taskId },\n include: { project: true },\n });\n\n if (!task) {\n throw new Error(\"Task not found\");\n }\n\n // Validate task belongs to specified project\n if (task.projectId !== projectId) {\n throw new Error(\"Task does not belong to the specified project\");\n }\n\n if (task.assigneeId !== userId) {\n throw new Error(\"You can only abandon tasks you are assigned to\");\n }\n\n // Check if repository URL exists before parsing\n const repositoryUrl = task.project?.repositoryUrl;\n const repoInfo = repositoryUrl\n ? GitHubProvider.parseRepositoryUrl(repositoryUrl)\n : undefined;\n\n if (deleteBranch && repoInfo && task.branchName) {\n const github = getGitHubClient(task.project?.organizationId || \"\");\n try {\n await github.deleteBranch(repoInfo.owner, repoInfo.repo, task.branchName);\n } catch (error) {\n console.error(\"Failed to delete GitHub branch when abandoning task\", {\n taskId,\n projectId: task.projectId,\n organizationId: task.project?.organizationId,\n repositoryOwner: repoInfo.owner,\n repositoryName: repoInfo.repo,\n branchName: task.branchName,\n error,\n });\n throw new Error(\"Failed to delete branch\");\n }\n }\n\n // Use TaskState enum constant instead of string literal\n const newState =\n task.state === TaskState.IN_PROGRESS ? TaskState.READY : task.state;\n\n const updatedTask = await prisma.task.update({\n where: { id: taskId },\n data: {\n state: newState,\n assigneeId: null,\n assignedAt: null,\n startedAt: null,\n updatedAt: new Date(),\n },\n });\n\n return {\n success: true,\n taskId: updatedTask.id,\n state: updatedTask.state,\n branchDeleted: deleteBranch ? !!repoInfo && !!task.branchName : false,\n };\n}\n\nasync function createPersonalProject(\n userId: string,\n name: string,\n description: string | undefined,\n repositoryUrl: string,\n) {\n const user = await prisma.user.findUnique({\n where: { id: userId },\n include: { organizations: true },\n });\n\n if (!user) {\n throw new Error(\"User not found\");\n }\n\n const repoInfo = GitHubProvider.parseRepositoryUrl(repositoryUrl);\n\n if (!repoInfo) {\n throw new Error(\"Invalid repository URL\");\n }\n\n const github = getGitHubClient(user.organizations[0]?.organizationId || \"\");\n const branchInfo = await github.getBranchInfo({\n owner: repoInfo.owner,\n repo: repoInfo.repo,\n branch: \"main\",\n });\n\n if (!branchInfo) {\n throw new Error(\"Could not get repository branch info\");\n }\n\n const project = await prisma.project.create({\n data: {\n name,\n description,\n type: ProjectType.PERSONAL,\n origin: ProjectOrigin.CREATED,\n ownerId: userId,\n organizationId: null,\n repositoryUrl,\n baseBranch: \"main\",\n },\n });\n\n return {\n success: true,\n projectId: project.id,\n };\n}\n","import basePrisma from \"./client.js\";\nimport { dbQueryDuration, dbSlowQueriesTotal, recordTiming } from \"@mtaap/core\";\nexport const prisma = basePrisma.$extends({\n query: {\n async $allOperations({ args, model, operation, query }) {\n const start = Date.now();\n try {\n return await query(args);\n }\n finally {\n const durationMs = Date.now() - start;\n const modelLabel = model ?? \"raw\";\n recordTiming(\"db\", operation, durationMs, { model: modelLabel });\n dbQueryDuration.observe({ operation }, durationMs / 1000);\n if (durationMs > 1000) {\n dbSlowQueriesTotal.inc({ operation });\n }\n }\n },\n },\n});\nexport * from \"@prisma/client\";\n","import { PrismaClient } from \"@prisma/client\";\nimport { PrismaPg } from \"@prisma/adapter-pg\";\nconst adapter = new PrismaPg({\n connectionString: process.env.DATABASE_URL,\n});\n// Use globalThis for broader environment compatibility\nconst globalForPrisma = globalThis;\n// Named export with global memoization\nexport const prisma = globalForPrisma.prisma ??\n new PrismaClient({\n adapter,\n });\nif (process.env.NODE_ENV !== \"production\") {\n globalForPrisma.prisma = prisma;\n}\nexport default prisma;\nexport * from \"@prisma/client\";\n","/**\n * Task State Enum\n */\nexport var TaskState;\n(function (TaskState) {\n TaskState[\"BACKLOG\"] = \"BACKLOG\";\n TaskState[\"READY\"] = \"READY\";\n TaskState[\"IN_PROGRESS\"] = \"IN_PROGRESS\";\n TaskState[\"REVIEW\"] = \"REVIEW\";\n TaskState[\"DONE\"] = \"DONE\";\n})(TaskState || (TaskState = {}));\n/**\n * User Role Enum\n */\nexport var UserRole;\n(function (UserRole) {\n UserRole[\"ADMIN\"] = \"ADMIN\";\n UserRole[\"MEMBER\"] = \"MEMBER\";\n})(UserRole || (UserRole = {}));\n/**\n * Project Type Enum\n */\nexport var ProjectType;\n(function (ProjectType) {\n ProjectType[\"TEAM\"] = \"TEAM\";\n ProjectType[\"PERSONAL\"] = \"PERSONAL\";\n})(ProjectType || (ProjectType = {}));\n/**\n * Project Origin Enum\n */\nexport var ProjectOrigin;\n(function (ProjectOrigin) {\n ProjectOrigin[\"CREATED\"] = \"CREATED\";\n ProjectOrigin[\"PROMOTED\"] = \"PROMOTED\";\n})(ProjectOrigin || (ProjectOrigin = {}));\n/**\n * Task Priority Enum\n */\nexport var TaskPriority;\n(function (TaskPriority) {\n TaskPriority[\"LOW\"] = \"LOW\";\n TaskPriority[\"MEDIUM\"] = \"MEDIUM\";\n TaskPriority[\"HIGH\"] = \"HIGH\";\n TaskPriority[\"CRITICAL\"] = \"CRITICAL\";\n})(TaskPriority || (TaskPriority = {}));\n/**\n * Deployment Mode Enum\n */\nexport var DeploymentMode;\n(function (DeploymentMode) {\n DeploymentMode[\"SAAS\"] = \"saas\";\n DeploymentMode[\"ONPREM\"] = \"onprem\";\n})(DeploymentMode || (DeploymentMode = {}));\n/**\n * Error Type Enum (for agent error reporting)\n */\nexport var ErrorType;\n(function (ErrorType) {\n ErrorType[\"BUILD_FAILURE\"] = \"BUILD_FAILURE\";\n ErrorType[\"TEST_FAILURE\"] = \"TEST_FAILURE\";\n ErrorType[\"CONFLICT\"] = \"CONFLICT\";\n ErrorType[\"AUTH_ERROR\"] = \"AUTH_ERROR\";\n ErrorType[\"OTHER\"] = \"OTHER\";\n})(ErrorType || (ErrorType = {}));\n/**\n * Pull Request Status Enum\n */\nexport var PRStatus;\n(function (PRStatus) {\n PRStatus[\"OPEN\"] = \"OPEN\";\n PRStatus[\"CLOSED\"] = \"CLOSED\";\n PRStatus[\"MERGED\"] = \"MERGED\";\n PRStatus[\"DELETED\"] = \"DELETED\";\n})(PRStatus || (PRStatus = {}));\n/**\n * Pricing Tier Enum\n */\nexport var PricingTier;\n(function (PricingTier) {\n PricingTier[\"FREE\"] = \"FREE\";\n PricingTier[\"PRO\"] = \"PRO\";\n PricingTier[\"ENTERPRISE\"] = \"ENTERPRISE\";\n})(PricingTier || (PricingTier = {}));\n/**\n * API Key Permission Levels\n */\nexport var ApiKeyPermission;\n(function (ApiKeyPermission) {\n ApiKeyPermission[\"READ\"] = \"READ\";\n ApiKeyPermission[\"WRITE\"] = \"WRITE\";\n ApiKeyPermission[\"ADMIN\"] = \"ADMIN\";\n})(ApiKeyPermission || (ApiKeyPermission = {}));\n/**\n * WebSocket Event Types\n */\nexport var WebSocketEventType;\n(function (WebSocketEventType) {\n WebSocketEventType[\"TASK_ASSIGNED\"] = \"task.assigned\";\n WebSocketEventType[\"TASK_ABANDONED\"] = \"task.abandoned\";\n WebSocketEventType[\"TASK_PROGRESS\"] = \"task.progress\";\n WebSocketEventType[\"TASK_PR_CREATED\"] = \"task.pr_created\";\n WebSocketEventType[\"TASK_REVIEW_REQUESTED\"] = \"task.review_requested\";\n WebSocketEventType[\"TASK_COMPLETED\"] = \"task.completed\";\n WebSocketEventType[\"TASK_ERROR\"] = \"task.error\";\n WebSocketEventType[\"TASK_STATE_CHANGED\"] = \"task.state_changed\";\n WebSocketEventType[\"MEMBER_JOINED\"] = \"member.joined\";\n})(WebSocketEventType || (WebSocketEventType = {}));\n/**\n * Authentication Provider Types\n */\nexport var AuthProvider;\n(function (AuthProvider) {\n AuthProvider[\"CREDENTIALS\"] = \"credentials\";\n AuthProvider[\"LDAP\"] = \"ldap\";\n AuthProvider[\"SSO\"] = \"sso\";\n})(AuthProvider || (AuthProvider = {}));\n/**\n * Subscription Status Enum\n */\nexport var SubscriptionStatus;\n(function (SubscriptionStatus) {\n SubscriptionStatus[\"ACTIVE\"] = \"ACTIVE\";\n SubscriptionStatus[\"INACTIVE\"] = \"INACTIVE\";\n SubscriptionStatus[\"PAST_DUE\"] = \"PAST_DUE\";\n SubscriptionStatus[\"CANCELED\"] = \"CANCELED\";\n SubscriptionStatus[\"INCOMPLETE\"] = \"INCOMPLETE\";\n})(SubscriptionStatus || (SubscriptionStatus = {}));\n/**\n * Audit Event Types\n */\nexport var EventType;\n(function (EventType) {\n EventType[\"AUTH\"] = \"AUTH\";\n EventType[\"AUTHORIZATION\"] = \"AUTHORIZATION\";\n EventType[\"ACCESS\"] = \"ACCESS\";\n EventType[\"MODIFICATION\"] = \"MODIFICATION\";\n})(EventType || (EventType = {}));\n","import { TaskState } from \"./enums\";\n// Valid state transitions for Kanban board drag-and-drop\n// Forward: BACKLOG -> READY -> IN_PROGRESS -> REVIEW -> DONE\n// Backward: Any state can move back to earlier states (except DONE which is final)\n// DONE is terminal - cannot be changed once completed\nconst VALID_TRANSITIONS = {\n [TaskState.BACKLOG]: [TaskState.READY],\n [TaskState.READY]: [TaskState.BACKLOG, TaskState.IN_PROGRESS],\n [TaskState.IN_PROGRESS]: [\n TaskState.BACKLOG,\n TaskState.READY,\n TaskState.REVIEW,\n ],\n [TaskState.REVIEW]: [\n TaskState.BACKLOG,\n TaskState.READY,\n TaskState.IN_PROGRESS,\n TaskState.DONE,\n ],\n [TaskState.DONE]: [],\n};\nexport function isValidStateTransition(from, to) {\n if (from === to)\n return true;\n return VALID_TRANSITIONS[from]?.includes(to) ?? false;\n}\nexport function getValidNextStates(current) {\n return VALID_TRANSITIONS[current] ?? [];\n}\nexport function validateStateTransition(from, to) {\n if (from === to) {\n return { valid: true };\n }\n if (!isValidStateTransition(from, to)) {\n const validNext = getValidNextStates(from);\n const validStates = validNext.length > 0 ? validNext.join(\", \") : \"none\";\n return {\n valid: false,\n error: `Invalid state transition from ${from} to ${to}. Valid transitions: ${validStates}`,\n };\n }\n return { valid: true };\n}\n","export const VERSION = \"0.1.0\";\n","import { PricingTier } from \"../constants/enums\";\nimport { VERSION } from \"../version\";\nconst DEPLOYMENT_MODE = (process.env.DEPLOYMENT_MODE ||\n \"saas\");\nexport const config = {\n version: VERSION,\n deploymentMode: DEPLOYMENT_MODE,\n billing: {\n enabled: DEPLOYMENT_MODE === \"saas\",\n revenuecat: {\n publicKey: process.env.REVENUECAT_PUBLIC_API_KEY,\n stripeKey: process.env.STRIPE_SECRET_KEY, // Required by RevenueCat Web Billing\n },\n },\n licensing: {\n enabled: DEPLOYMENT_MODE === \"onprem\",\n licenseKey: process.env.LICENSE_KEY,\n },\n auth: {\n credentials: true,\n ldap: process.env.LDAP_ENABLED === \"true\",\n },\n git: {\n deleteMergedBranches: process.env.DELETE_MERGED_BRANCHES !== \"false\",\n enforceConventionalCommits: process.env.ENFORCE_CONVENTIONAL_COMMITS === \"true\",\n defaultBaseBranch: process.env.DEFAULT_BASE_BRANCH || \"develop\",\n },\n pricing: {\n maxPersonalProjects: {\n FREE: 2,\n PRO: 5,\n ENTERPRISE: 10,\n },\n maxCollaboratorsPerProject: {\n FREE: 3,\n PRO: -1,\n ENTERPRISE: -1,\n },\n maxProjectsPerOrg: {\n FREE: 5,\n PRO: -1,\n ENTERPRISE: -1,\n },\n maxSeats: {\n FREE: 3,\n PRO: -1,\n ENTERPRISE: -1,\n },\n // Default seats when subscription doesn't specify an explicit seat count\n defaultSeats: {\n FREE: 3,\n PRO: 10,\n ENTERPRISE: 999999,\n },\n },\n features: {\n stripe: {\n enabled: DEPLOYMENT_MODE === \"saas\",\n },\n gitlab: {\n enabled: true,\n },\n ldap: {\n enabled: process.env.LDAP_ENABLED === \"true\",\n },\n auditLogs: {\n enabled: process.env.AUDIT_LOGS_ENABLED === \"true\",\n },\n },\n api: {\n apiKey: {\n defaultExpiryDays: 90,\n prefix: \"usr_\",\n },\n rateLimit: {\n requestsPerMinute: 100,\n requestsPerHour: 1000,\n },\n },\n limits: {\n projectNameMaxLength: 100,\n taskDescriptionMaxLength: 5000,\n notesMaxLength: 500,\n conventionsNotesMaxLength: 500,\n recentCompletedTasksLimit: 10,\n },\n};\nexport function getConfig(key) {\n return config[key];\n}\nexport function isFeatureEnabled(feature) {\n const featureConfig = config.features[feature];\n if (typeof featureConfig === \"object\" && \"enabled\" in featureConfig) {\n return featureConfig.enabled;\n }\n return true;\n}\nexport function getPricingLimits(tier) {\n return {\n maxPersonalProjects: config.pricing.maxPersonalProjects[tier],\n maxCollaboratorsPerProject: config.pricing.maxCollaboratorsPerProject[tier],\n maxProjectsPerOrg: config.pricing.maxProjectsPerOrg[tier],\n maxSeats: config.pricing.maxSeats[tier],\n };\n}\n/**\n * Default seat allocations per pricing tier.\n * Used when a subscription doesn't specify an explicit seat count.\n */\nexport const DEFAULT_SEAT_LIMITS = {\n [PricingTier.FREE]: config.pricing.defaultSeats.FREE,\n [PricingTier.PRO]: config.pricing.defaultSeats.PRO,\n [PricingTier.ENTERPRISE]: config.pricing.defaultSeats.ENTERPRISE,\n};\n","import { z } from \"zod\";\nimport { TaskState, TaskPriority, UserRole, ProjectType, ProjectOrigin, ErrorType, PRStatus, PricingTier, ApiKeyPermission, } from \"../constants/enums\";\nexport * from \"../constants/enums\";\n// Note: z is exported from validation/index.ts - do not export here to avoid ambiguity\n/**\n * User Types\n */\nexport const UserIdSchema = z.string().regex(/^usr_[a-zA-Z0-9]+$/);\nexport const UserSchema = z.object({\n id: UserIdSchema,\n email: z.string().email(),\n name: z.string().min(1).max(255),\n role: z.nativeEnum(UserRole),\n organizationId: z.string().optional(),\n lastActiveAt: z.coerce.date().optional(),\n createdAt: z.coerce.date(),\n});\nexport const OrganizationUserSchema = z.object({\n id: z.number().int(),\n userId: UserIdSchema,\n organizationId: z.string(),\n roleId: z.nativeEnum(UserRole).optional(),\n user: UserSchema.pick({ id: true, email: true, name: true, role: true }),\n createdAt: z.coerce.date(),\n});\n/**\n * Organization/Tenant Types\n */\nexport const OrganizationIdSchema = z.string().regex(/^org_[a-zA-Z0-9]+$/);\nexport const OrganizationSchema = z.object({\n id: OrganizationIdSchema,\n name: z.string().min(1).max(255),\n slug: z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9-]+$/),\n logoUrl: z.string().url().nullable(),\n accentColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/)\n .nullable(),\n tenantName: z.string().nullable(),\n pricingTier: z.nativeEnum(PricingTier),\n createdAt: z.coerce.date(),\n});\nexport const OrganizationSettingsSchema = z.object({\n organizationId: OrganizationIdSchema,\n ldapEnabled: z.boolean(),\n ldapUrl: z.string().url().nullable(),\n ldapBindDN: z.string().nullable(),\n ldapSearchBase: z.string().nullable(),\n deleteMergedBranches: z.boolean(),\n enforceConventionalCommits: z.boolean(),\n maxPersonalProjectsPerUser: z.number().int().min(0),\n});\n/**\n * Tag Types (for access control)\n */\nexport const TagSchema = z.object({\n id: z.string(),\n name: z.string().min(1).max(50),\n organizationId: OrganizationIdSchema,\n createdAt: z.coerce.date(),\n});\n/**\n * Project Types\n */\nexport const ProjectIdSchema = z.string().regex(/^prj_[a-zA-Z0-9]+$/);\nexport const ProjectSchema = z.object({\n id: ProjectIdSchema,\n name: z.string().min(1).max(100),\n description: z.string().max(500).nullable(),\n type: z.nativeEnum(ProjectType),\n origin: z.nativeEnum(ProjectOrigin),\n organizationId: OrganizationIdSchema,\n ownerId: UserIdSchema.nullable(),\n repositoryUrl: z.string().url(),\n baseBranch: z.string().default(\"develop\"),\n tags: z.array(z.string()),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n/**\n * Epic Types\n */\nexport const EpicIdSchema = z.string().regex(/^epc_[a-zA-Z0-9]+$/);\nexport const EpicSchema = z.object({\n id: EpicIdSchema,\n projectId: ProjectIdSchema,\n name: z.string().min(1).max(200),\n description: z.string().nullable(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n/**\n * Task/User Story Types\n */\nexport const TaskIdSchema = z.string().regex(/^tsk_[a-zA-Z0-9]+$/);\nexport function generateTaskDisplayId(taskCuid) {\n const lastChars = taskCuid.slice(-3).toUpperCase();\n return `TASK-${lastChars}`;\n}\nexport const TaskSchema = z.object({\n id: TaskIdSchema,\n projectId: ProjectIdSchema,\n epicId: EpicIdSchema.nullable(),\n title: z.string().min(1).max(200),\n description: z.string().max(5000),\n state: z.nativeEnum(TaskState),\n priority: z.nativeEnum(TaskPriority),\n assigneeId: UserIdSchema.nullable(),\n createdBy: UserIdSchema.nullable(),\n assignedAt: z.coerce.date().nullable(),\n startedAt: z.coerce.date().nullable(),\n completedAt: z.coerce.date().nullable(),\n branchName: z.string().nullable(),\n pullRequestUrl: z.string().url().nullable(),\n pullRequestNumber: z.number().int().nullable(),\n pullRequestStatus: z.nativeEnum(PRStatus).nullable(),\n errorType: z.nativeEnum(ErrorType).nullable(),\n errorMessage: z.string().max(1000).nullable(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\nexport const AcceptanceCriterionSchema = z.object({\n id: z.string(),\n taskId: TaskIdSchema,\n description: z.string().min(1).max(500),\n completed: z.boolean(),\n completedAt: z.coerce.date().nullable(),\n order: z.number().int(),\n createdAt: z.coerce.date(),\n});\nexport const ProgressUpdateSchema = z.object({\n id: z.string(),\n taskId: TaskIdSchema,\n userId: UserIdSchema,\n message: z.string().max(2000),\n checkpoints: z.array(z.string()).optional(),\n createdAt: z.coerce.date(),\n});\nexport const TaskNoteSchema = z.object({\n id: z.string(),\n taskId: TaskIdSchema,\n userId: UserIdSchema,\n content: z.string().max(500),\n createdAt: z.coerce.date(),\n});\n/**\n * API Key Types\n */\nexport const ApiKeyIdSchema = z.string().regex(/^key_[a-zA-Z0-9]+$/);\nexport const ApiKeySchema = z.object({\n id: ApiKeyIdSchema,\n userId: UserIdSchema,\n name: z.string().min(1).max(100),\n keyHash: z.string(),\n permissions: z.nativeEnum(ApiKeyPermission),\n lastUsedAt: z.coerce.date().nullable(),\n expiresAt: z.coerce.date().nullable(),\n revoked: z.boolean(),\n createdAt: z.coerce.date(),\n});\n/**\n * Subscription/Seat Types\n */\nexport const SubscriptionIdSchema = z.string();\nexport const SubscriptionSchema = z.object({\n id: SubscriptionIdSchema,\n organizationId: OrganizationIdSchema,\n pricingTier: z.nativeEnum(PricingTier),\n seats: z.number().int().min(0),\n stripeSubscriptionId: z.string().nullable(),\n stripeCustomerId: z.string().nullable(),\n status: z.enum([\"active\", \"past_due\", \"canceled\", \"incomplete\"]),\n currentPeriodStart: z.coerce.date(),\n currentPeriodEnd: z.coerce.date(),\n createdAt: z.coerce.date(),\n});\n/**\n * Collaboration Types\n */\nexport const ProjectCollaboratorSchema = z.object({\n id: z.string(),\n projectId: ProjectIdSchema,\n userId: UserIdSchema,\n addedBy: UserIdSchema,\n createdAt: z.coerce.date(),\n});\n","import { z } from \"zod\";\nimport { TaskState, TaskPriority, UserRole, ProjectType, ErrorType, ApiKeyPermission, } from \"../constants/enums\";\nexport * from \"../constants/enums\";\nexport * from \"./tier-validation\";\nexport { z };\n/**\n * Validation Schemas for MCP Server Tools\n */\nexport const ListProjectsInputSchema = z.object({\n workspaceType: z.preprocess((val) => (typeof val === \"string\" ? val.toUpperCase() : val), z.enum([\"TEAM\", \"PERSONAL\", \"ALL\"]).optional()),\n});\nexport const ListTasksInputSchema = z.object({\n projectId: z.string().optional(),\n state: z.nativeEnum(TaskState).optional(),\n assigneeId: z.string().optional(),\n});\nexport const GetTaskInputSchema = z.object({\n taskId: z.string().regex(/^tsk_[a-zA-Z0-9]+$/),\n});\nexport const AssignTaskInputSchema = z.object({\n projectId: z.string().regex(/^prj_[a-zA-Z0-9]+$/),\n taskId: z.string().regex(/^tsk_[a-zA-Z0-9]+$/),\n expectedState: z.nativeEnum(TaskState).default(TaskState.READY),\n});\nexport const UpdateProgressInputSchema = z.object({\n taskId: z.string().regex(/^tsk_[a-zA-Z0-9]+$/),\n statusMessage: z.string().max(1000).optional(),\n completedCheckpointIds: z.array(z.string()).optional(),\n currentCheckpointIndex: z.number().int().optional(),\n});\nexport const CompleteTaskInputSchema = z.object({\n projectId: z.string().regex(/^prj_[a-zA-Z0-9]+$/),\n taskId: z.string().regex(/^tsk_[a-zA-Z0-9]+$/),\n pullRequestTitle: z.string().min(1).max(300).optional(),\n pullRequestBody: z.string().max(10000).optional(),\n});\nexport const ReportErrorInputSchema = z.object({\n taskId: z.string().regex(/^tsk_[a-zA-Z0-9]+$/),\n errorType: z.nativeEnum(ErrorType),\n errorMessage: z.string().min(1).max(1000),\n context: z.string().max(2000).optional(),\n});\nexport const GetProjectContextInputSchema = z.object({\n projectId: z.string().regex(/^prj_[a-zA-Z0-9]+$/),\n});\nexport const AddNoteInputSchema = z.object({\n taskId: z.string().regex(/^tsk_[a-zA-Z0-9]+$/),\n content: z.string().min(1).max(500),\n});\nexport const AbandonTaskInputSchema = z.object({\n projectId: z.string().regex(/^prj_[a-zA-Z0-9]+$/),\n taskId: z.string().regex(/^tsk_[a-zA-Z0-9]+$/),\n deleteBranch: z.boolean().optional(),\n});\nexport const CreatePersonalProjectInputSchema = z.object({\n name: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n repositoryUrl: z.string().url(),\n});\nexport const CheckActiveTaskInputSchema = z.object({});\n/**\n * Validation Schemas for Webapp API Routes\n */\nexport const CreateOrganizationInputSchema = z.object({\n name: z.string().min(1).max(255),\n slug: z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9-]+$/)\n .optional(),\n});\nexport const UpdateOrganizationInputSchema = z.object({\n organizationId: z.string().regex(/^org_[a-zA-Z0-9]+$/),\n name: z.string().min(1).max(255).optional(),\n logoUrl: z.string().url().nullable().optional(),\n accentColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/, \"Invalid hex color format. Expected #RRGGBB\")\n .nullable()\n .optional(),\n tenantName: z.string().max(255).nullable().optional(),\n});\nexport const CreateProjectInputSchema = z.object({\n name: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n type: z.nativeEnum(ProjectType),\n repositoryUrl: z.string().url(),\n baseBranch: z.string().default(\"develop\").optional(),\n tags: z.array(z.string()).default([]),\n});\nexport const UpdateProjectInputSchema = z.object({\n projectId: z.string().min(1).optional(),\n name: z.string().min(1).max(100).optional(),\n description: z.string().max(500).optional(),\n repositoryUrl: z.string().url().optional(),\n baseBranch: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\nexport const CreateEpicInputSchema = z.object({\n projectId: z.string().regex(/^prj_[a-zA-Z0-9]+$/),\n name: z.string().min(1).max(200),\n description: z.string().max(2000).optional(),\n});\nexport const CreateTaskInputSchema = z.object({\n projectId: z.string().min(1),\n epicId: z.string().min(1).nullable().optional(),\n title: z.string().min(1).max(200),\n description: z.string().max(5000),\n priority: z.nativeEnum(TaskPriority).default(TaskPriority.MEDIUM),\n acceptanceCriteria: z\n .array(z.object({\n description: z.string().min(1).max(500),\n }))\n .min(1),\n});\nexport const UpdateTaskInputSchema = z.object({\n taskId: z.string().min(1),\n title: z.string().min(1).max(200).optional(),\n description: z.string().max(5000).optional(),\n priority: z.nativeEnum(TaskPriority).optional(),\n state: z.nativeEnum(TaskState).optional(),\n assigneeId: z.string().nullable().optional(),\n acceptanceCriteria: z\n .array(z.object({\n id: z.string().optional(),\n description: z.string().min(1).max(500),\n completed: z.boolean().optional(),\n }))\n .optional(),\n});\nexport const AssignTaskWebappInputSchema = z.object({\n taskId: z.string().min(1),\n userId: z.string().min(1),\n});\nexport const CreateTagInputSchema = z.object({\n organizationId: z.string().regex(/^org_[a-zA-Z0-9]+$/),\n name: z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-zA-Z0-9\\s-]+$/),\n});\nexport const UpdateTagInputSchema = z.object({\n name: z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-zA-Z0-9\\s-]+$/),\n});\nexport const UpdateOrganizationSettingsInputSchema = z.object({\n organizationId: z.string().regex(/^org_[a-zA-Z0-9]+$/),\n ldapEnabled: z.boolean().optional(),\n ldapUrl: z.string().url().nullable().optional(),\n ldapBindDN: z.string().nullable().optional(),\n ldapSearchBase: z.string().nullable().optional(),\n deleteMergedBranches: z.boolean().optional(),\n enforceConventionalCommits: z.boolean().optional(),\n maxPersonalProjectsPerUser: z.number().int().min(0).optional(),\n logoUrl: z.string().url().nullable().optional(),\n accentColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/, \"Invalid hex color format. Expected #RRGGBB\")\n .nullable()\n .optional(),\n tenantName: z.string().max(255).nullable().optional(),\n});\nexport const InviteUserInputSchema = z.object({\n organizationId: z.string().regex(/^org_[a-zA-Z0-9]+$/),\n email: z.string().email(),\n role: z.nativeEnum(UserRole).default(UserRole.MEMBER),\n tags: z.array(z.string()).default([]),\n});\nexport const AssignUserTagsInputSchema = z.object({\n userId: z.string().regex(/^usr_[a-zA-Z0-9]+$/),\n tags: z.array(z.string()).min(0),\n});\nexport const InviteCollaboratorInputSchema = z.object({\n projectId: z.string().regex(/^prj_[a-zA-Z0-9]+$/),\n email: z.string().email(),\n});\nexport const PublishProjectInputSchema = z.object({\n projectId: z.string().regex(/^prj_[a-zA-Z0-9]+$/),\n transferOwnership: z.boolean().default(false),\n tags: z.array(z.string()).min(1),\n});\nexport const GenerateApiKeyInputSchema = z.object({\n name: z.string().min(1).max(100),\n expiresInDays: z.number().int().min(1).max(365).default(90),\n permissions: z.nativeEnum(ApiKeyPermission).default(ApiKeyPermission.WRITE),\n});\nexport const RevokeApiKeyInputSchema = z.object({\n keyId: z.string().regex(/^key_[a-zA-Z0-9]+$/),\n});\n/**\n * Validation Schemas for Authentication\n */\nexport const LoginInputSchema = z.object({\n email: z.string().email(),\n password: z.string().min(8).max(255),\n});\nexport const RegisterInputSchema = z.object({\n email: z.string().email(),\n password: z.string().min(8).max(255),\n name: z.string().min(1).max(255),\n organizationSlug: z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9-]+$/)\n .optional(),\n});\n","/**\n * In-memory metrics storage.\n *\n * Note: Metric retention is intentionally handled by the external Prometheus scraper,\n * not at the application level. This is standard practice - the application exposes\n * current metric values, and Prometheus handles time-series storage, retention policies,\n * and historical queries. See Prometheus documentation for configuring retention periods.\n */\nconst metrics = new Map();\nfunction labelsToKey(labels) {\n if (!labels || Object.keys(labels).length === 0)\n return \"\";\n return Object.entries(labels)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=\"${v}\"`)\n .join(\",\");\n}\nexport function createCounter(name, help) {\n const data = {\n name,\n type: \"counter\",\n help,\n values: new Map(),\n };\n metrics.set(name, data);\n return {\n inc(labels, value = 1) {\n const key = labelsToKey(labels);\n const current = data.values.get(key) || 0;\n data.values.set(key, current + value);\n },\n };\n}\nexport function createGauge(name, help) {\n const data = {\n name,\n type: \"gauge\",\n help,\n values: new Map(),\n };\n metrics.set(name, data);\n return {\n set(labels, value) {\n const key = labelsToKey(labels);\n data.values.set(key, value);\n },\n inc(labels, value = 1) {\n const key = labelsToKey(labels);\n const current = data.values.get(key) || 0;\n data.values.set(key, current + value);\n },\n dec(labels, value = 1) {\n const key = labelsToKey(labels);\n const current = data.values.get(key) || 0;\n data.values.set(key, current - value);\n },\n };\n}\nexport function createHistogram(name, help, buckets = [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]) {\n const data = {\n name,\n type: \"histogram\",\n help,\n values: new Map(),\n buckets,\n };\n metrics.set(name, data);\n return {\n observe(labels, value) {\n const baseKey = labelsToKey(labels);\n const sumKey = `${baseKey}|sum`;\n const countKey = `${baseKey}|count`;\n data.values.set(sumKey, (data.values.get(sumKey) || 0) + value);\n data.values.set(countKey, (data.values.get(countKey) || 0) + 1);\n for (const bucket of buckets) {\n const bucketKey = `${baseKey}|le=\"${bucket}\"`;\n if (value <= bucket) {\n data.values.set(bucketKey, (data.values.get(bucketKey) || 0) + 1);\n }\n }\n const infKey = `${baseKey}|le=\"+Inf\"`;\n data.values.set(infKey, (data.values.get(infKey) || 0) + 1);\n },\n };\n}\nexport function getMetricsAsPrometheus() {\n const lines = [];\n for (const [, data] of metrics) {\n lines.push(`# HELP ${data.name} ${data.help}`);\n lines.push(`# TYPE ${data.name} ${data.type}`);\n if (data.type === \"histogram\") {\n const grouped = new Map();\n for (const [key, value] of data.values) {\n const [baseLabels, suffix] = key.split(\"|\");\n if (!grouped.has(baseLabels)) {\n grouped.set(baseLabels, new Map());\n }\n grouped.get(baseLabels).set(suffix, value);\n }\n for (const [baseLabels, suffixes] of grouped) {\n const labelStr = baseLabels ? `{${baseLabels}}` : \"\";\n for (const [suffix, value] of suffixes) {\n if (suffix.startsWith(\"le=\")) {\n const le = suffix.replace(\"le=\", \"\");\n const fullLabels = baseLabels\n ? `{${baseLabels},le=${le}}`\n : `{le=${le}}`;\n lines.push(`${data.name}_bucket${fullLabels} ${value}`);\n }\n }\n lines.push(`${data.name}_sum${labelStr} ${suffixes.get(\"sum\") || 0}`);\n lines.push(`${data.name}_count${labelStr} ${suffixes.get(\"count\") || 0}`);\n }\n }\n else {\n for (const [key, value] of data.values) {\n const labelStr = key ? `{${key}}` : \"\";\n lines.push(`${data.name}${labelStr} ${value}`);\n }\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n}\nexport function resetMetrics() {\n for (const data of metrics.values()) {\n data.values.clear();\n }\n}\nexport const httpRequestsTotal = createCounter(\"mtaap_http_requests_total\", \"Total number of HTTP requests\");\nexport const httpRequestDuration = createHistogram(\"mtaap_http_request_duration_seconds\", \"HTTP request duration in seconds\");\nexport const activeUsers = createGauge(\"mtaap_active_users\", \"Number of active users\");\nexport const tasksTotal = createCounter(\"mtaap_tasks_total\", \"Total number of tasks by state\");\nexport const taskStateChanges = createCounter(\"mtaap_task_state_changes_total\", \"Total number of task state changes\");\nexport const httpErrorsTotal = createCounter(\"mtaap_http_errors_total\", \"Total number of HTTP errors\");\nexport const httpActiveConnections = createGauge(\"mtaap_http_active_connections\", \"Number of active HTTP connections\");\nexport const newSignupsTotal = createCounter(\"mtaap_new_signups_total\", \"Total number of new user signups\");\nexport const loginSuccessTotal = createCounter(\"mtaap_login_success_total\", \"Total number of successful logins\");\nexport const loginFailureTotal = createCounter(\"mtaap_login_failure_total\", \"Total number of failed logins\");\nexport const dbConnectionPoolActive = createGauge(\"mtaap_db_connection_pool_active\", \"Number of active database connections\");\nexport const dbConnectionPoolIdle = createGauge(\"mtaap_db_connection_pool_idle\", \"Number of idle database connections\");\nexport const dbConnectionPoolMax = createGauge(\"mtaap_db_connection_pool_max\", \"Maximum number of database connections\");\nexport const dbQueryDuration = createHistogram(\"mtaap_db_query_duration_seconds\", \"Database query duration in seconds\");\nexport const dbSlowQueriesTotal = createCounter(\"mtaap_db_slow_queries_total\", \"Total number of slow database queries (>1s)\");\nexport const dbErrorsTotal = createCounter(\"mtaap_db_errors_total\", \"Total number of database errors\");\nexport const tasksCreatedTotal = createCounter(\"mtaap_tasks_created_total\", \"Total number of tasks created\");\nexport const tasksAssignedTotal = createCounter(\"mtaap_tasks_assigned_total\", \"Total number of tasks assigned\");\nexport const tasksCompletedTotal = createCounter(\"mtaap_tasks_completed_total\", \"Total number of tasks completed\");\nexport const tasksByState = createGauge(\"mtaap_tasks_by_state\", \"Number of tasks by state\");\n","const MAX_SAMPLES = 1000;\nconst ALERT_COOLDOWN_MS = 5 * 60 * 1000;\nconst DEFAULT_THRESHOLDS = {\n api: {\n p50: 100,\n p95: 500,\n p99: 1000,\n },\n db: {\n p95: 100,\n p99: 500,\n },\n webvitals: {\n FCP: 2000,\n LCP: 2500,\n FID: 100,\n CLS: 0.1,\n },\n};\nfunction cloneThresholds() {\n return Object.fromEntries(Object.entries(DEFAULT_THRESHOLDS).map(([category, metrics]) => [\n category,\n { ...metrics },\n ]));\n}\nfunction labelsToKey(labels) {\n if (!labels || Object.keys(labels).length === 0)\n return \"\";\n return Object.entries(labels)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(\",\");\n}\nfunction percentile(sortedValues, percentileValue) {\n if (sortedValues.length === 0)\n return 0;\n const rank = Math.ceil((percentileValue / 100) * sortedValues.length);\n const index = Math.min(Math.max(rank - 1, 0), sortedValues.length - 1);\n return sortedValues[index];\n}\nclass CircularBuffer {\n capacity;\n values = [];\n index = 0;\n size = 0;\n constructor(capacity) {\n this.capacity = capacity;\n }\n add(value) {\n if (this.size < this.capacity) {\n this.values.push(value);\n this.size += 1;\n this.index = this.size % this.capacity;\n return;\n }\n this.values[this.index] = value;\n this.index = (this.index + 1) % this.capacity;\n }\n getValues() {\n if (this.size < this.capacity) {\n return this.values.slice(0, this.size);\n }\n return this.values.slice();\n }\n}\nexport class PerformanceMonitor {\n samples = new Map();\n thresholds = cloneThresholds();\n alertCallback;\n lastAlertTimestamps = new Map();\n recordTiming(category, name, durationMs, labels) {\n if (!Number.isFinite(durationMs))\n return;\n const categoryMap = this.getCategoryMap(category);\n const nameMap = this.getNameMap(categoryMap, name);\n const labelKey = labelsToKey(labels);\n const buffer = nameMap.get(labelKey) ?? new CircularBuffer(MAX_SAMPLES);\n buffer.add(durationMs);\n nameMap.set(labelKey, buffer);\n }\n getPercentiles(category, name) {\n const samples = this.collectSamples(category, name);\n if (samples.length === 0) {\n return { p50: 0, p95: 0, p99: 0 };\n }\n const sorted = [...samples].sort((a, b) => a - b);\n return {\n p50: percentile(sorted, 50),\n p95: percentile(sorted, 95),\n p99: percentile(sorted, 99),\n };\n }\n checkThresholds() {\n const alerts = [];\n const now = Date.now();\n const callbackAlerts = [];\n for (const [category, nameMap] of this.samples) {\n const thresholds = this.thresholds[category];\n if (!thresholds)\n continue;\n for (const name of nameMap.keys()) {\n const percentiles = this.getPercentiles(category, name);\n for (const [metric, threshold] of Object.entries(thresholds)) {\n const value = this.resolveMetricValue(metric, name, percentiles);\n if (value === undefined || value <= threshold)\n continue;\n const alert = {\n category,\n name,\n metric,\n value,\n threshold,\n };\n alerts.push(alert);\n const alertKey = `${category}|${name}|${metric}`;\n const lastAlertTime = this.lastAlertTimestamps.get(alertKey);\n if (!lastAlertTime || now - lastAlertTime >= ALERT_COOLDOWN_MS) {\n this.lastAlertTimestamps.set(alertKey, now);\n callbackAlerts.push(alert);\n }\n }\n }\n }\n if (callbackAlerts.length > 0 && this.alertCallback) {\n this.alertCallback(callbackAlerts);\n }\n return alerts;\n }\n setAlertCallback(callback) {\n this.alertCallback = callback;\n }\n setThreshold(category, metric, value) {\n if (!this.thresholds[category]) {\n this.thresholds[category] = {};\n }\n this.thresholds[category][metric] = value;\n }\n collectSamples(category, name) {\n const categoryMap = this.samples.get(category);\n if (!categoryMap)\n return [];\n const entries = name\n ? [[name, categoryMap.get(name)]]\n : Array.from(categoryMap.entries());\n const samples = [];\n for (const [, labelMap] of entries) {\n if (!labelMap)\n continue;\n for (const buffer of labelMap.values()) {\n samples.push(...buffer.getValues());\n }\n }\n return samples;\n }\n resolveMetricValue(metric, name, percentiles) {\n if (metric === \"p50\")\n return percentiles.p50;\n if (metric === \"p95\")\n return percentiles.p95;\n if (metric === \"p99\")\n return percentiles.p99;\n if (metric === name)\n return percentiles.p95;\n return undefined;\n }\n getCategoryMap(category) {\n const existing = this.samples.get(category);\n if (existing)\n return existing;\n const created = new Map();\n this.samples.set(category, created);\n return created;\n }\n getNameMap(categoryMap, name) {\n const existing = categoryMap.get(name);\n if (existing)\n return existing;\n const created = new Map();\n categoryMap.set(name, created);\n return created;\n }\n}\nconst defaultMonitor = new PerformanceMonitor();\nexport function recordTiming(category, name, durationMs, labels) {\n defaultMonitor.recordTiming(category, name, durationMs, labels);\n}\nexport function getPercentiles(category, name) {\n return defaultMonitor.getPercentiles(category, name);\n}\nexport function checkThresholds() {\n return defaultMonitor.checkThresholds();\n}\nexport function setAlertCallback(callback) {\n defaultMonitor.setAlertCallback(callback);\n}\nexport function setThreshold(category, metric, value) {\n defaultMonitor.setThreshold(category, metric, value);\n}\n","export class NoOpErrorTracker {\n captureError(error, context) {\n console.error(\"Error captured:\", error.message, context);\n }\n captureException(error, context) {\n console.error(\"Exception captured:\", error, context);\n }\n captureMessage(message, level, context) {\n console[level === \"warning\" ? \"warn\" : level](`Message captured [${level}]:`, message, context);\n }\n setUser(user) {\n console.log(\"User set:\", user);\n }\n clearUser() {\n console.log(\"User cleared\");\n }\n}\nlet errorTrackerInstance = new NoOpErrorTracker();\nexport function initializeErrorTracker(tracker) {\n errorTrackerInstance = tracker;\n}\nexport function getErrorTracker() {\n return errorTrackerInstance;\n}\nexport function captureError(error, context) {\n errorTrackerInstance.captureError(error, context);\n}\nexport function captureException(error, context) {\n errorTrackerInstance.captureException(error, context);\n}\nexport function captureMessage(message, level = \"error\", context) {\n errorTrackerInstance.captureMessage(message, level, context);\n}\nexport function setErrorUser(user) {\n errorTrackerInstance.setUser(user);\n}\nexport function clearErrorUser() {\n errorTrackerInstance.clearUser();\n}\nexport function shouldIgnoreError(statusCode) {\n if (!statusCode) {\n return false;\n }\n const ignoredStatusCodes = [404, 401];\n return ignoredStatusCodes.includes(statusCode);\n}\nexport function shouldIgnoreErrorByMessage(error) {\n const ignoredMessages = [\n \"ResizeObserver loop\",\n \"ResizeObserver loop limit exceeded\",\n \"Non-Error promise rejection captured\",\n \"NEXT_NOT_FOUND\",\n \"NEXT_REDIRECT\",\n ];\n return ignoredMessages.some((msg) => error.message.toLowerCase().includes(msg.toLowerCase()));\n}\n","/**\n * API Key Authentication Module\n *\n * This module provides lightweight API key validation functions that don't depend on\n * NextAuth, Next.js, or LDAP. It's designed to be used by the MCP server and other\n * lightweight consumers that only need API key authentication.\n *\n * Dependencies: @mtaap/db (Prisma), @mtaap/core (ApiKeyPermission enum), crypto (Node.js built-in)\n */\nimport { prisma } from \"@mtaap/db\";\nimport { ApiKeyPermission } from \"@mtaap/core\";\n/**\n * Permission hierarchy for API keys.\n * Higher rank means more permissions (READ < WRITE < ADMIN).\n */\nexport const API_KEY_PERMISSION_RANK = {\n [ApiKeyPermission.READ]: 1,\n [ApiKeyPermission.WRITE]: 2,\n [ApiKeyPermission.ADMIN]: 3,\n};\n/**\n * Hash an API key using SHA-256.\n * This is used to store and compare API keys securely.\n */\nexport async function hashApiKey(apiKey) {\n const crypto = await import(\"crypto\");\n return crypto.createHash(\"sha256\").update(apiKey).digest(\"hex\");\n}\n/**\n * Generate a new API key with the 'usr_' prefix.\n * Returns a 64-character hex string prefixed with 'usr_'.\n */\nexport async function generateApiKey() {\n const crypto = await import(\"crypto\");\n return `usr_${crypto.randomBytes(32).toString(\"hex\")}`;\n}\n/**\n * Validate an API key and return user/organization information.\n * Updates the lastUsedAt timestamp on successful validation.\n *\n * @param apiKey - The API key to validate (with or without 'usr_' prefix)\n * @returns ValidatedApiKey if valid, null if invalid or expired\n */\nexport async function validateApiKey(apiKey) {\n const keyHash = await hashApiKey(apiKey);\n const keyRecord = await prisma.apiKey.findFirst({\n where: {\n keyHash,\n revoked: false,\n },\n include: {\n user: {\n include: {\n organizations: {\n take: 1,\n include: {\n organization: true,\n },\n },\n },\n },\n },\n });\n if (!keyRecord ||\n (keyRecord.expiresAt && keyRecord.expiresAt < new Date())) {\n return null;\n }\n await prisma.apiKey.update({\n where: { id: keyRecord.id },\n data: { lastUsedAt: new Date() },\n });\n const orgUser = keyRecord.user.organizations?.[0];\n return {\n user: keyRecord.user,\n organization: orgUser?.organization,\n apiKey: {\n id: keyRecord.id,\n name: keyRecord.name,\n // Cast Prisma enum to @mtaap/core enum (same values, different types)\n permissions: keyRecord.permissions,\n expiresAt: keyRecord.expiresAt,\n lastUsedAt: keyRecord.lastUsedAt,\n },\n };\n}\n/**\n * Check if an API key has the required permission level.\n * Permissions are hierarchical: READ < WRITE < ADMIN.\n *\n * @param apiKey - Object containing the permissions field\n * @param required - The minimum required permission level\n * @returns true if the API key has sufficient permissions\n */\nexport function checkApiKeyPermissions(apiKey, required) {\n const actual = apiKey.permissions ?? ApiKeyPermission.WRITE;\n return API_KEY_PERMISSION_RANK[actual] >= API_KEY_PERMISSION_RANK[required];\n}\n","export const VERSION = \"0.1.3\" as const;\n\nexport type Version = typeof VERSION;\n","import { Octokit } from \"octokit\";\nexport class GitHubProvider {\n octokit;\n constructor(token) {\n this.octokit = new Octokit({ auth: token });\n }\n async createBranch(options) {\n try {\n const { data: ref } = await this.octokit.rest.git.getRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${options.sourceBranch}`,\n });\n await this.octokit.rest.git.createRef({\n owner: options.owner,\n repo: options.repo,\n ref: `refs/heads/${options.newBranch}`,\n sha: ref.object.sha,\n });\n return {\n success: true,\n branchName: options.newBranch,\n };\n }\n catch (error) {\n return {\n success: false,\n branchName: options.newBranch,\n error: error.message || \"Failed to create branch\",\n };\n }\n }\n async createPR(options) {\n try {\n const { data: pr } = await this.octokit.rest.pulls.create({\n owner: options.owner,\n repo: options.repo,\n title: options.title,\n body: options.body,\n head: options.head,\n base: options.base,\n });\n return {\n success: true,\n prUrl: pr.html_url,\n prNumber: pr.number,\n };\n }\n catch (error) {\n return {\n success: false,\n prUrl: \"\",\n prNumber: 0,\n error: error.message || \"Failed to create pull request\",\n };\n }\n }\n async getBranchInfo(options) {\n try {\n const { data: ref } = await this.octokit.rest.git.getRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${options.branch}`,\n });\n return ref.object.sha;\n }\n catch {\n return null;\n }\n }\n async listBranches(owner, repo) {\n try {\n const { data: branches } = await this.octokit.rest.repos.listBranches({\n owner,\n repo,\n per_page: 100,\n });\n return branches.map((branch) => ({\n name: branch.name,\n commitSha: branch.commit.sha,\n protected: branch.protected,\n }));\n }\n catch (error) {\n console.error(\"Failed to list branches:\", error);\n return [];\n }\n }\n async setupWebhook(options) {\n try {\n const { data: webhook } = await this.octokit.rest.repos.createWebhook({\n owner: options.owner,\n repo: options.repo,\n name: \"web\",\n config: {\n url: options.url,\n content_type: \"json\",\n secret: options.secret,\n },\n events: options.events || [\"push\", \"pull_request\"],\n active: true,\n });\n return {\n success: true,\n webhookId: webhook.id,\n };\n }\n catch (error) {\n return {\n success: false,\n webhookId: 0,\n error: error.message || \"Failed to setup webhook\",\n };\n }\n }\n async getPRInfo(prNumber, owner, repo) {\n try {\n const { data: pr } = await this.octokit.rest.pulls.get({\n owner,\n repo,\n pull_number: prNumber,\n });\n return {\n number: pr.number,\n title: pr.title,\n state: pr.state,\n htmlUrl: pr.html_url,\n mergedAt: pr.merged_at ? new Date(pr.merged_at) : undefined,\n user: pr.user\n ? {\n login: pr.user.login,\n }\n : undefined,\n };\n }\n catch {\n return null;\n }\n }\n async getRecentCommits(owner, repo, branch, limit = 10) {\n try {\n const { data: commits } = await this.octokit.rest.repos.listCommits({\n owner,\n repo,\n sha: branch,\n per_page: limit,\n });\n return commits.map((commit) => ({\n sha: commit.sha,\n message: commit.commit.message,\n author: commit.commit.author?.name && commit.commit.author?.email\n ? {\n name: commit.commit.author.name,\n email: commit.commit.author.email,\n }\n : undefined,\n date: new Date(commit.commit.author?.date || Date.now()),\n }));\n }\n catch {\n return [];\n }\n }\n async deleteBranch(owner, repo, branch) {\n try {\n await this.octokit.rest.git.deleteRef({\n owner,\n repo,\n ref: `heads/${branch}`,\n });\n return true;\n }\n catch (error) {\n console.error(`Failed to delete branch ${branch}:`, error.message);\n return false;\n }\n }\n async getRepositoryReadme(owner, repo) {\n try {\n const { data } = await this.octokit.rest.repos.getReadme({\n owner,\n repo,\n mediaType: {\n format: \"raw\",\n },\n });\n // When using raw format, data is returned as string\n return data;\n }\n catch {\n // 404 means no README exists\n return null;\n }\n }\n async getRepositoryPackageJson(owner, repo) {\n try {\n const { data } = await this.octokit.rest.repos.getContent({\n owner,\n repo,\n path: \"package.json\",\n });\n // getContent returns different shapes depending on path\n if (\"content\" in data && data.type === \"file\") {\n // Content is base64 encoded\n return Buffer.from(data.content, \"base64\").toString(\"utf-8\");\n }\n return null;\n }\n catch {\n // 404 means no package.json exists\n return null;\n }\n }\n static parseRepositoryUrl(url) {\n try {\n const match = url.match(/github\\.com[/:]([^/]+)\\/([^/.]+)/);\n if (!match || match.length < 3) {\n return null;\n }\n return {\n owner: match[1],\n repo: match[2].replace(/\\.git$/, \"\"),\n };\n }\n catch {\n return null;\n }\n }\n static async verifyWebhookSignature(payload, signature, secret) {\n const crypto = await import(\"crypto\");\n const expectedSignature = crypto\n .createHmac(\"sha256\", secret)\n .update(payload)\n .digest(\"hex\");\n const parts = signature.split(\"=\");\n if (parts.length < 2) {\n return false;\n }\n const receivedSignature = parts[1];\n return crypto.timingSafeEqual(Buffer.from(receivedSignature), Buffer.from(expectedSignature));\n }\n async verifyRepositoryAccess(owner, repo) {\n try {\n await this.octokit.rest.repos.get({\n owner,\n repo,\n });\n return { success: true };\n }\n catch (error) {\n if (error.status === 404) {\n return {\n success: false,\n error: \"Repository not found or you don't have access\",\n };\n }\n if (error.status === 401 || error.status === 403) {\n return {\n success: false,\n error: \"Authentication failed. Check your GitHub token permissions\",\n };\n }\n return {\n success: false,\n error: error.message || \"Failed to verify repository access\",\n };\n }\n }\n}\n","/**\n * Git error types for categorizing different failure scenarios\n */\nexport var GitErrorType;\n(function (GitErrorType) {\n GitErrorType[\"BRANCH_NOT_FOUND\"] = \"BRANCH_NOT_FOUND\";\n GitErrorType[\"BRANCH_EXISTS\"] = \"BRANCH_EXISTS\";\n GitErrorType[\"AUTH_INVALID\"] = \"AUTH_INVALID\";\n GitErrorType[\"REPOSITORY_NOT_FOUND\"] = \"REPOSITORY_NOT_FOUND\";\n GitErrorType[\"RATE_LIMITED\"] = \"RATE_LIMITED\";\n GitErrorType[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n GitErrorType[\"PERMISSION_DENIED\"] = \"PERMISSION_DENIED\";\n GitErrorType[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n})(GitErrorType || (GitErrorType = {}));\n/**\n * Custom error class for Git operations\n */\nexport class GitError extends Error {\n type;\n statusCode;\n retryAfter;\n constructor(type, message, statusCode, retryAfter) {\n super(message);\n this.name = \"GitError\";\n this.type = type;\n this.statusCode = statusCode;\n this.retryAfter = retryAfter;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, GitError);\n }\n }\n /**\n * Create GitError from Octokit error response\n */\n static fromOctokitError(error) {\n const status = error.status;\n const message = error.message || \"Unknown error\";\n if (status === 429) {\n const retryAfter = error.response?.headers?.[\"retry-after\"] != null\n ? parseInt(error.response.headers[\"retry-after\"], 10)\n : undefined;\n return new GitError(GitErrorType.RATE_LIMITED, retryAfter\n ? `Rate limit exceeded, retry after ${retryAfter}s`\n : \"Rate limit exceeded\", status, retryAfter);\n }\n if (status === 401) {\n return new GitError(GitErrorType.AUTH_INVALID, \"Invalid authentication token\", status);\n }\n if (status === 403) {\n return new GitError(GitErrorType.PERMISSION_DENIED, \"Permission denied - insufficient access\", status);\n }\n if (status === 404) {\n if (message.toLowerCase().includes(\"branch\")) {\n return new GitError(GitErrorType.BRANCH_NOT_FOUND, message, status);\n }\n return new GitError(GitErrorType.REPOSITORY_NOT_FOUND, message, status);\n }\n if (status === 409 ||\n (status === 422 && message.toLowerCase().includes(\"already exists\"))) {\n return new GitError(GitErrorType.BRANCH_EXISTS, message, status);\n }\n if (!status ||\n error.code === \"ENOTFOUND\" ||\n error.code === \"ECONNREFUSED\" ||\n error.code === \"ETIMEDOUT\") {\n return new GitError(GitErrorType.NETWORK_ERROR, \"Network error: \" + (error.code || message), status);\n }\n return new GitError(GitErrorType.UNKNOWN_ERROR, message, status);\n }\n /**\n * Check if error is retryable\n */\n isRetryable() {\n return (this.type === GitErrorType.RATE_LIMITED ||\n this.type === GitErrorType.NETWORK_ERROR);\n }\n /**\n * Get user-friendly error message\n */\n toUserMessage() {\n switch (this.type) {\n case GitErrorType.BRANCH_NOT_FOUND:\n return \"Branch not found\";\n case GitErrorType.BRANCH_EXISTS:\n return \"Branch already exists\";\n case GitErrorType.AUTH_INVALID:\n return \"Authentication failed - check your GitHub token\";\n case GitErrorType.REPOSITORY_NOT_FOUND:\n return \"Repository not found or you don't have access\";\n case GitErrorType.RATE_LIMITED:\n return this.retryAfter\n ? `Rate limit exceeded - retry after ${this.retryAfter} seconds`\n : \"Rate limit exceeded - please try again later\";\n case GitErrorType.NETWORK_ERROR:\n return \"Network error - check your connection\";\n case GitErrorType.PERMISSION_DENIED:\n return \"Permission denied - insufficient repository access\";\n default:\n return this.message || \"An unknown error occurred\";\n }\n }\n}\n","import { ApiKeyPermission } from \"@mtaap/core\";\n\n/**\n * Permission levels ranked by access level.\n * Using string values for compatibility between Prisma's enum and @mtaap/core enum.\n */\nconst PERMISSION_RANK: Record<string, number> = {\n READ: 1,\n WRITE: 2,\n ADMIN: 3,\n};\n\nexport interface ApiKeyPermissionContext {\n id?: string;\n permissions: \"READ\" | \"WRITE\" | \"ADMIN\";\n}\n\nexport function assertApiKeyPermission(\n apiKey: ApiKeyPermissionContext,\n required: ApiKeyPermission,\n toolName: string,\n): void {\n const actualRank = PERMISSION_RANK[apiKey.permissions] ?? 0;\n const requiredRank = PERMISSION_RANK[required] ?? 0;\n\n if (actualRank >= requiredRank) {\n return;\n }\n\n console.warn(\"API key permission violation\", {\n keyId: apiKey.id,\n requiredPermission: required,\n actualPermission: apiKey.permissions,\n tool: toolName,\n });\n\n const error = new Error(\n `API key lacks required permissions (required: ${required})`,\n );\n (error as Error & { status?: number }).status = 403;\n throw error;\n}\n"],"mappings":"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","names":["prisma","TaskState","UserRole","ProjectType","ProjectOrigin","TaskPriority","DeploymentMode","ErrorType","PRStatus","PricingTier","ApiKeyPermission","WebSocketEventType","AuthProvider","SubscriptionStatus","EventType","z","z","metrics","labelsToKey","client_star","prisma","prisma","VERSION","GitErrorType","prisma","VERSION","prisma"]}