@mtaap/mcp 0.2.1 → 0.2.2
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.
- package/dist/cli.js +132 -38
- package/dist/cli.js.map +1 -1
- package/dist/index.js +93 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/version.ts","../../../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","../src/api-client.ts","../src/permissions.ts","../src/cli.ts"],"sourcesContent":["/**\n * MTAAP MCP Server\n *\n * Model Context Protocol server for AI agent integration.\n * Uses REST API to communicate with the MTAAP webapp.\n */\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { VERSION } from \"./version.js\";\nimport {\n TaskState,\n ApiKeyPermission,\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\";\nimport {\n MCPApiClient,\n createApiClientFromEnv,\n ApiError,\n AuthContext,\n} from \"./api-client.js\";\nimport { assertApiKeyPermission } from \"./permissions.js\";\n\nexport async function createMCPServer() {\n const server = new McpServer({\n name: \"mtaap\",\n version: VERSION,\n });\n\n // Create API client from environment\n const apiClient = createApiClientFromEnv();\n\n // Authenticate and get user context\n let authContext: AuthContext;\n try {\n authContext = await apiClient.authenticate();\n } catch (error) {\n if (error instanceof ApiError) {\n throw new Error(`Authentication failed: ${error.message}`);\n }\n throw error;\n }\n\n // Create a mock API key object for permission checking\n // The actual permission check happens server-side, this is for local validation\n const mockApiKey = {\n permissions: authContext.permissions.includes(\"ADMIN\")\n ? ApiKeyPermission.ADMIN\n : authContext.permissions.includes(\"WRITE\")\n ? ApiKeyPermission.WRITE\n : ApiKeyPermission.READ,\n };\n\n server.registerTool(\n \"list_projects\",\n {\n description: \"List accessible projects (personal + team via tags)\",\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.READ,\n \"list_projects\",\n );\n const validated = ListProjectsInputSchema.parse(args);\n\n try {\n const projects = await apiClient.listProjects(validated.workspaceType);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(projects, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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(mockApiKey, ApiKeyPermission.READ, \"list_tasks\");\n const validated = ListTasksInputSchema.parse(args);\n\n try {\n const tasks = await apiClient.listTasks({\n projectId: validated.projectId,\n state: validated.state,\n assigneeId: validated.assigneeId,\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(tasks, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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(mockApiKey, ApiKeyPermission.READ, \"get_task\");\n const validated = GetTaskInputSchema.parse(args);\n\n try {\n const task = await apiClient.getTask(validated.taskId);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(task, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.WRITE,\n \"assign_task\",\n );\n const validated = AssignTaskInputSchema.parse(args);\n\n try {\n const result = await apiClient.assignTask(\n validated.taskId,\n validated.projectId,\n validated.expectedState,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.WRITE,\n \"update_progress\",\n );\n const validated = UpdateProgressInputSchema.parse(args);\n\n try {\n const result = await apiClient.updateProgress(validated.taskId, {\n statusMessage: validated.statusMessage,\n completedCheckpointIds: validated.completedCheckpointIds,\n currentCheckpointIndex: validated.currentCheckpointIndex,\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.WRITE,\n \"complete_task\",\n );\n const validated = CompleteTaskInputSchema.parse(args);\n\n try {\n const result = await apiClient.completeTask(\n validated.taskId,\n validated.projectId,\n validated.pullRequestTitle,\n validated.pullRequestBody,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.READ,\n \"check_active_task\",\n );\n\n // This is a local file operation, no API call needed\n const result = await checkActiveTask();\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 mockApiKey,\n ApiKeyPermission.WRITE,\n \"report_error\",\n );\n const validated = ReportErrorInputSchema.parse(args);\n\n try {\n const result = await apiClient.reportError(\n validated.taskId,\n validated.errorType,\n validated.errorMessage,\n validated.context,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.READ,\n \"get_project_context\",\n );\n const validated = GetProjectContextInputSchema.parse(args);\n\n try {\n const context = await apiClient.getProjectContext(validated.projectId);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(context, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"add_note\",\n {\n description: \"Append implementation notes to task\",\n },\n async (args) => {\n assertApiKeyPermission(mockApiKey, ApiKeyPermission.WRITE, \"add_note\");\n const validated = AddNoteInputSchema.parse(args);\n\n try {\n const result = await apiClient.addNote(\n validated.taskId,\n validated.content,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.WRITE,\n \"abandon_task\",\n );\n const validated = AbandonTaskInputSchema.parse(args);\n\n try {\n const result = await apiClient.abandonTask(\n validated.taskId,\n validated.projectId,\n validated.deleteBranch,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.WRITE,\n \"create_personal_project\",\n );\n const validated = CreatePersonalProjectInputSchema.parse(args);\n\n try {\n const result = await apiClient.createPersonalProject(\n validated.name,\n validated.description,\n validated.repositoryUrl,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"get_version\",\n {\n description: \"Get the current MTAAP version\",\n },\n async () => {\n assertApiKeyPermission(mockApiKey, 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\n/**\n * Handle API errors and return appropriate MCP response\n */\nfunction handleApiError(error: unknown): {\n content: Array<{ type: string; text: string }>;\n isError: boolean;\n} {\n if (error instanceof ApiError) {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n error: error.message,\n code: error.code,\n status: error.status,\n details: error.details,\n },\n null,\n 2,\n ),\n },\n ],\n isError: true,\n };\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }, null, 2),\n },\n ],\n isError: true,\n };\n}\n\n/**\n * Check for active task file (local operation, no API needed)\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 try {\n await fs.promises.access(activeTaskPath);\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 } catch {\n return {\n hasActiveTask: false,\n task: null,\n };\n }\n}\n","export const VERSION = \"0.2.1\" as const;\n\nexport type Version = typeof VERSION;\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 * MCP API Client\n *\n * HTTP client for communicating with the MTAAP webapp REST API.\n * Replaces direct database access for a lighter, more secure MCP package.\n */\n\nimport {\n TaskState,\n ErrorType,\n} from \"@mtaap/core\";\n\nconst DEFAULT_TIMEOUT = 30000; // 30 seconds\n\n/**\n * API Client Configuration\n */\nexport interface ApiClientConfig {\n baseUrl: string;\n apiKey: string;\n timeout?: number;\n debug?: boolean;\n}\n\n/**\n * Authentication context returned from the API\n */\nexport interface AuthContext {\n userId: string;\n organizationId: string | undefined;\n permissions: string[];\n userName: string;\n userEmail: string;\n}\n\n/**\n * Project from API\n */\nexport interface Project {\n id: string;\n name: string;\n description: string | null;\n type: string;\n origin: string;\n repositoryUrl: string;\n baseBranch: string;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Task from API\n */\nexport interface Task {\n id: string;\n projectId: string;\n projectName: string;\n epicId: string | null;\n epicName: string | null;\n title: string;\n description: string | null;\n state: TaskState;\n priority: string;\n assigneeId: string | null;\n assigneeName: string | null;\n assigneeEmail: string | null;\n createdBy: string;\n createdByName: string | null;\n assignedAt: string | null;\n startedAt: string | null;\n completedAt: string | null;\n branchName: string | null;\n pullRequestUrl: string | null;\n pullRequestNumber: number | null;\n errorType: string | null;\n errorMessage: string | null;\n acceptanceCriteria: Array<{\n id: string;\n description: string;\n completed: boolean;\n completedAt: string | null;\n order: number;\n }>;\n progressUpdates?: Array<{\n id: string;\n message: string;\n checkpoints: string[];\n userId: string;\n createdAt: string;\n }>;\n notes?: Array<{\n id: string;\n content: string;\n userId: string;\n createdAt: string;\n }>;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Project context from API\n */\nexport interface ProjectContext {\n readme: string;\n stack: string[];\n recentCompleted: Array<{\n id: string;\n title: string;\n completedAt: string | null;\n }>;\n conventions: {\n branchPrefix: string;\n commitFormat: string;\n testCommand: string;\n baseBranch: string;\n notes: string;\n };\n}\n\n/**\n * API Error\n */\nexport class ApiError extends Error {\n constructor(\n message: string,\n public code: string,\n public status: number,\n public details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\n/**\n * MCP API Client\n */\nexport class MCPApiClient {\n private baseUrl: string;\n private apiKey: string;\n private timeout: number;\n private debug: boolean;\n private authContext: AuthContext | null = null;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, \"\"); // Remove trailing slash\n this.apiKey = config.apiKey;\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\n this.debug = config.debug ?? false;\n }\n\n /**\n * Make an HTTP request to the API\n */\n private async request<T>(\n method: string,\n path: string,\n body?: Record<string, unknown>,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n if (this.debug) {\n console.error(`[mcp-api] ${method} ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": this.apiKey,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n\n if (!response.ok) {\n throw new ApiError(\n data.error || \"API request failed\",\n data.code || \"UNKNOWN_ERROR\",\n response.status,\n data.details,\n );\n }\n\n return data as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof ApiError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new ApiError(\n \"Request timed out\",\n \"TIMEOUT\",\n 408,\n );\n }\n\n throw new ApiError(\n error instanceof Error ? error.message : \"Unknown error\",\n \"NETWORK_ERROR\",\n 0,\n );\n }\n }\n\n /**\n * Authenticate and get user context\n */\n async authenticate(): Promise<AuthContext> {\n const context = await this.request<AuthContext>(\"GET\", \"/api/mcp/auth\");\n this.authContext = context;\n return context;\n }\n\n /**\n * Get cached auth context or authenticate\n */\n async getAuthContext(): Promise<AuthContext> {\n if (this.authContext) {\n return this.authContext;\n }\n return this.authenticate();\n }\n\n /**\n * List accessible projects\n */\n async listProjects(workspaceType: string = \"ALL\"): Promise<Project[]> {\n return this.request<Project[]>(\n \"GET\",\n `/api/mcp/projects?workspaceType=${encodeURIComponent(workspaceType)}`,\n );\n }\n\n /**\n * Get single project details\n */\n async getProject(projectId: string): Promise<Project> {\n return this.request<Project>(\"GET\", `/api/mcp/projects/${projectId}`);\n }\n\n /**\n * Get project context (README, stack, conventions)\n */\n async getProjectContext(projectId: string): Promise<ProjectContext> {\n return this.request<ProjectContext>(\n \"GET\",\n `/api/mcp/projects/${projectId}/context`,\n );\n }\n\n /**\n * Create a personal project\n */\n async createPersonalProject(\n name: string,\n description: string | undefined,\n repositoryUrl: string,\n ): Promise<{ success: boolean; projectId: string }> {\n return this.request<{ success: boolean; projectId: string }>(\n \"POST\",\n \"/api/mcp/projects/personal\",\n { name, description, repositoryUrl },\n );\n }\n\n /**\n * List tasks with optional filters\n */\n async listTasks(filters: {\n projectId?: string;\n state?: TaskState;\n assigneeId?: string;\n } = {}): Promise<Task[]> {\n const params = new URLSearchParams();\n if (filters.projectId) params.set(\"projectId\", filters.projectId);\n if (filters.state) params.set(\"state\", filters.state);\n if (filters.assigneeId) params.set(\"assigneeId\", filters.assigneeId);\n\n const queryString = params.toString();\n const path = queryString ? `/api/mcp/tasks?${queryString}` : \"/api/mcp/tasks\";\n\n return this.request<Task[]>(\"GET\", path);\n }\n\n /**\n * Get full task details\n */\n async getTask(taskId: string): Promise<Task> {\n return this.request<Task>(\"GET\", `/api/mcp/tasks/${taskId}`);\n }\n\n /**\n * Assign task to current user and create branch\n */\n async assignTask(\n taskId: string,\n projectId: string,\n expectedState: TaskState = TaskState.READY,\n ): Promise<{\n success: boolean;\n taskId: string;\n branchName?: string;\n currentState?: string;\n message?: string;\n }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/assign`, {\n projectId,\n expectedState,\n });\n }\n\n /**\n * Update task progress\n */\n async updateProgress(\n taskId: string,\n data: {\n statusMessage?: string;\n completedCheckpointIds?: string[];\n currentCheckpointIndex?: number;\n },\n ): Promise<{ success: boolean; taskId: string }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/progress`, data);\n }\n\n /**\n * Complete task and create PR\n */\n async completeTask(\n taskId: string,\n projectId: string,\n pullRequestTitle?: string,\n pullRequestBody?: string,\n ): Promise<{\n success: boolean;\n taskId: string;\n prUrl?: string;\n prNumber?: number;\n }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/complete`, {\n projectId,\n pullRequestTitle,\n pullRequestBody,\n });\n }\n\n /**\n * Abandon task and optionally delete branch\n */\n async abandonTask(\n taskId: string,\n projectId: string,\n deleteBranch: boolean = false,\n ): Promise<{\n success: boolean;\n taskId: string;\n state: string;\n branchDeleted: boolean;\n }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/abandon`, {\n projectId,\n deleteBranch,\n });\n }\n\n /**\n * Report task error\n */\n async reportError(\n taskId: string,\n errorType: ErrorType,\n errorMessage: string,\n context?: string,\n ): Promise<{ success: boolean; taskId: string }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/error`, {\n errorType,\n errorMessage,\n context,\n });\n }\n\n /**\n * Add note to task\n */\n async addNote(\n taskId: string,\n content: string,\n ): Promise<{ success: boolean; noteId: string }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/notes`, { content });\n }\n\n /**\n * Get GitHub token\n */\n async getGitHubToken(\n organizationId?: string,\n ): Promise<{ token: string; source: string }> {\n const path = organizationId\n ? `/api/mcp/github-token?organizationId=${encodeURIComponent(organizationId)}`\n : \"/api/mcp/github-token\";\n return this.request(\"GET\", path);\n }\n}\n\n/**\n * Create API client from environment variables\n */\nexport function createApiClientFromEnv(): MCPApiClient {\n const baseUrl = process.env.MTAAP_BASE_URL;\n const apiKey = process.env.MTAAP_API_KEY;\n\n if (!baseUrl) {\n throw new Error(\"MTAAP_BASE_URL environment variable is required\");\n }\n\n if (!apiKey) {\n throw new Error(\"MTAAP_API_KEY environment variable is required\");\n }\n\n return new MCPApiClient({\n baseUrl,\n apiKey,\n debug: process.env.MTAAP_DEBUG === \"true\",\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\" | ApiKeyPermission | null;\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","#!/usr/bin/env node\n\nimport { createMCPServer } from \"./index.js\";\n\n/**\n * CLI entry point for the MTAAP MCP server.\n * Validates environment, starts the server, and handles graceful shutdown.\n */\n\nfunction validateEnvironment(): void {\n const errors: string[] = [];\n\n // Required: MTAAP_API_KEY\n if (!process.env.MTAAP_API_KEY) {\n errors.push(\n \"MTAAP_API_KEY is required. Generate one at https://collab.mtaap.de/settings/api-keys\",\n );\n }\n\n // Required: MTAAP_BASE_URL\n if (!process.env.MTAAP_BASE_URL) {\n errors.push(\n \"MTAAP_BASE_URL is required. Set to https://collab.mtaap.de for cloud or your self-hosted URL.\",\n );\n }\n\n // Exit if there are errors\n if (errors.length > 0) {\n for (const error of errors) {\n console.error(`[mtaap-mcp] Error: ${error}`);\n }\n console.error(\"\\nRequired environment variables:\");\n console.error(\" MTAAP_API_KEY Your MTAAP API key\");\n console.error(\" MTAAP_BASE_URL MTAAP webapp URL (e.g., https://collab.mtaap.de)\");\n console.error(\"\\nExample mcp.json configuration:\");\n console.error(`{\n \"mcpServers\": {\n \"mtaap\": {\n \"command\": \"npx\",\n \"args\": [\"@mtaap/mcp\"],\n \"env\": {\n \"MTAAP_API_KEY\": \"usr_your_api_key_here\",\n \"MTAAP_BASE_URL\": \"https://collab.mtaap.de\"\n }\n }\n }\n}`);\n process.exit(1);\n }\n\n // Validate URL format\n try {\n new URL(process.env.MTAAP_BASE_URL!);\n } catch {\n console.error(`[mtaap-mcp] Error: MTAAP_BASE_URL is not a valid URL: ${process.env.MTAAP_BASE_URL}`);\n process.exit(1);\n }\n}\n\nasync function checkConnectivity(): Promise<void> {\n const baseUrl = process.env.MTAAP_BASE_URL!;\n console.error(`[mtaap-mcp] Checking connectivity to ${baseUrl}...`);\n\n try {\n const response = await fetch(`${baseUrl}/api/mcp/auth`, {\n method: \"GET\",\n headers: {\n \"X-API-Key\": process.env.MTAAP_API_KEY!,\n },\n signal: AbortSignal.timeout(10000), // 10 second timeout\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n if (response.status === 401) {\n console.error(\"[mtaap-mcp] Error: Invalid or expired API key\");\n process.exit(1);\n }\n console.error(`[mtaap-mcp] Error: API returned ${response.status}: ${data.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n console.error(\"[mtaap-mcp] Connected successfully\");\n } catch (error) {\n if (error instanceof Error && error.name === \"TimeoutError\") {\n console.error(`[mtaap-mcp] Error: Connection timed out to ${baseUrl}`);\n } else {\n console.error(`[mtaap-mcp] Error: Could not connect to ${baseUrl}`);\n console.error(`[mtaap-mcp] Details: ${error instanceof Error ? error.message : String(error)}`);\n }\n process.exit(1);\n }\n}\n\nasync function main(): Promise<void> {\n console.error(\"[mtaap-mcp] Starting MTAAP MCP server...\");\n\n validateEnvironment();\n await checkConnectivity();\n\n try {\n await createMCPServer();\n console.error(\"[mtaap-mcp] Server started successfully\");\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`[mtaap-mcp] Failed to start server: ${message}`);\n process.exit(1);\n }\n}\n\n// Graceful shutdown handling\nfunction setupShutdownHandlers(): void {\n const shutdown = (signal: string): void => {\n console.error(`[mtaap-mcp] Received ${signal}, shutting down...`);\n process.exit(0);\n };\n\n process.on(\"SIGINT\", () => shutdown(\"SIGINT\"));\n process.on(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n\n // Handle uncaught exceptions\n process.on(\"uncaughtException\", (error) => {\n console.error(\"[mtaap-mcp] Uncaught exception:\", error.message);\n process.exit(1);\n });\n\n // Handle unhandled promise rejections\n process.on(\"unhandledRejection\", (reason) => {\n const message = reason instanceof Error ? reason.message : String(reason);\n console.error(\"[mtaap-mcp] Unhandled rejection:\", message);\n process.exit(1);\n });\n}\n\nsetupShutdownHandlers();\nmain();\n"],"mappings":"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","names":["TaskState","UserRole","ProjectType","ProjectOrigin","TaskPriority","DeploymentMode","ErrorType","PRStatus","PricingTier","ApiKeyPermission","WebSocketEventType","AuthProvider","SubscriptionStatus","EventType","VERSION","VERSION","import_zod","metrics","labelsToKey","config"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/version.ts","../../../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","../src/api-client.ts","../src/permissions.ts","../src/cli.ts"],"sourcesContent":["/**\n * MTAAP MCP Server\n *\n * Model Context Protocol server for AI agent integration.\n * Uses REST API to communicate with the MTAAP webapp.\n */\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { VERSION } from \"./version.js\";\nimport { z } from \"zod\";\nimport {\n TaskState,\n ApiKeyPermission,\n ListProjectsInputSchema,\n ListTasksInputSchema,\n GetTaskInputSchema,\n AssignTaskInputSchema,\n UpdateProgressInputSchema,\n CompleteTaskInputSchema,\n ReportErrorInputSchema,\n GetProjectContextInputSchema,\n AddNoteInputSchema,\n AbandonTaskInputSchema,\n CreatePersonalProjectInputSchema,\n ErrorType,\n} from \"@mtaap/core\";\nimport {\n MCPApiClient,\n createApiClientFromEnv,\n ApiError,\n AuthContext,\n} from \"./api-client.js\";\nimport { assertApiKeyPermission } from \"./permissions.js\";\n\nexport async function createMCPServer() {\n const server = new McpServer({\n name: \"mtaap\",\n version: VERSION,\n });\n\n // Create API client from environment\n const apiClient = createApiClientFromEnv();\n\n // Authenticate and get user context\n let authContext: AuthContext;\n try {\n authContext = await apiClient.authenticate();\n } catch (error) {\n if (error instanceof ApiError) {\n throw new Error(`Authentication failed: ${error.message}`);\n }\n throw error;\n }\n\n // Create a mock API key object for permission checking\n // The actual permission check happens server-side, this is for local validation\n const mockApiKey = {\n permissions: authContext.permissions.includes(\"ADMIN\")\n ? ApiKeyPermission.ADMIN\n : authContext.permissions.includes(\"WRITE\")\n ? ApiKeyPermission.WRITE\n : ApiKeyPermission.READ,\n };\n\n server.registerTool(\n \"list_projects\",\n {\n description: \"List accessible projects (personal + team via tags)\",\n inputSchema: {\n workspaceType: z\n .enum([\"TEAM\", \"PERSONAL\", \"ALL\"])\n .optional()\n .describe(\"Filter by workspace type\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.READ,\n \"list_projects\",\n );\n const validated = ListProjectsInputSchema.parse(args);\n\n try {\n const projects = await apiClient.listProjects(validated.workspaceType);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(projects, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"list_tasks\",\n {\n description: \"Returns available tasks (filterable by project, state)\",\n inputSchema: {\n projectId: z.string().optional().describe(\"Filter by project ID\"),\n state: z.nativeEnum(TaskState).optional().describe(\"Filter by task state\"),\n assigneeId: z.string().optional().describe(\"Filter by assignee ID\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(mockApiKey, ApiKeyPermission.READ, \"list_tasks\");\n const validated = ListTasksInputSchema.parse(args);\n\n try {\n const tasks = await apiClient.listTasks({\n projectId: validated.projectId,\n state: validated.state,\n assigneeId: validated.assigneeId,\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(tasks, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"get_task\",\n {\n description: \"Full task details including acceptance criteria\",\n inputSchema: {\n taskId: z.string().describe(\"The task ID to retrieve\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(mockApiKey, ApiKeyPermission.READ, \"get_task\");\n const validated = GetTaskInputSchema.parse(args);\n\n try {\n const task = await apiClient.getTask(validated.taskId);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(task, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"assign_task\",\n {\n description: \"Atomic claim - creates branch. Fails if already taken.\",\n inputSchema: {\n projectId: z.string().describe(\"The project ID\"),\n taskId: z.string().describe(\"The task ID to assign\"),\n expectedState: z\n .nativeEnum(TaskState)\n .optional()\n .describe(\"Expected task state (default: READY)\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.WRITE,\n \"assign_task\",\n );\n const validated = AssignTaskInputSchema.parse(args);\n\n try {\n const result = await apiClient.assignTask(\n validated.taskId,\n validated.projectId,\n validated.expectedState,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"update_progress\",\n {\n description: \"Reports status, updates checkboxes, writes checkpoint\",\n inputSchema: {\n taskId: z.string().describe(\"The task ID to update\"),\n statusMessage: z\n .string()\n .optional()\n .describe(\"Status message (max 1000 chars)\"),\n completedCheckpointIds: z\n .array(z.string())\n .optional()\n .describe(\"Array of completed checkpoint IDs\"),\n currentCheckpointIndex: z\n .number()\n .optional()\n .describe(\"Current checkpoint index\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.WRITE,\n \"update_progress\",\n );\n const validated = UpdateProgressInputSchema.parse(args);\n\n try {\n const result = await apiClient.updateProgress(validated.taskId, {\n statusMessage: validated.statusMessage,\n completedCheckpointIds: validated.completedCheckpointIds,\n currentCheckpointIndex: validated.currentCheckpointIndex,\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"complete_task\",\n {\n description: \"Marks complete, triggers PR, deletes local state file\",\n inputSchema: {\n projectId: z.string().describe(\"The project ID\"),\n taskId: z.string().describe(\"The task ID to complete\"),\n pullRequestTitle: z\n .string()\n .optional()\n .describe(\"PR title (max 300 chars)\"),\n pullRequestBody: z\n .string()\n .optional()\n .describe(\"PR body/description (max 10000 chars)\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.WRITE,\n \"complete_task\",\n );\n const validated = CompleteTaskInputSchema.parse(args);\n\n try {\n const result = await apiClient.completeTask(\n validated.taskId,\n validated.projectId,\n validated.pullRequestTitle,\n validated.pullRequestBody,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\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 mockApiKey,\n ApiKeyPermission.READ,\n \"check_active_task\",\n );\n\n // This is a local file operation, no API call needed\n const result = await checkActiveTask();\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 inputSchema: {\n taskId: z.string().describe(\"The task ID\"),\n errorType: z\n .nativeEnum(ErrorType)\n .describe(\"Error type: BUILD_FAILURE, TEST_FAILURE, CONFLICT, AUTH_ERROR, OTHER\"),\n errorMessage: z.string().describe(\"Error message (max 1000 chars)\"),\n context: z.string().optional().describe(\"Additional context (max 2000 chars)\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.WRITE,\n \"report_error\",\n );\n const validated = ReportErrorInputSchema.parse(args);\n\n try {\n const result = await apiClient.reportError(\n validated.taskId,\n validated.errorType,\n validated.errorMessage,\n validated.context,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"get_project_context\",\n {\n description: \"Returns assembled context (README, stack, conventions)\",\n inputSchema: {\n projectId: z.string().describe(\"The project ID\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.READ,\n \"get_project_context\",\n );\n const validated = GetProjectContextInputSchema.parse(args);\n\n try {\n const context = await apiClient.getProjectContext(validated.projectId);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(context, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"add_note\",\n {\n description: \"Append implementation notes to task\",\n inputSchema: {\n taskId: z.string().describe(\"The task ID\"),\n content: z.string().describe(\"Note content (max 500 chars)\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(mockApiKey, ApiKeyPermission.WRITE, \"add_note\");\n const validated = AddNoteInputSchema.parse(args);\n\n try {\n const result = await apiClient.addNote(\n validated.taskId,\n validated.content,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"abandon_task\",\n {\n description: \"Unassign from a task and optionally delete the branch\",\n inputSchema: {\n projectId: z.string().describe(\"The project ID\"),\n taskId: z.string().describe(\"The task ID to abandon\"),\n deleteBranch: z\n .boolean()\n .optional()\n .describe(\"Whether to delete the associated branch\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.WRITE,\n \"abandon_task\",\n );\n const validated = AbandonTaskInputSchema.parse(args);\n\n try {\n const result = await apiClient.abandonTask(\n validated.taskId,\n validated.projectId,\n validated.deleteBranch,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"create_personal_project\",\n {\n description: \"Create project in user's personal workspace\",\n inputSchema: {\n name: z.string().describe(\"Project name (max 100 chars)\"),\n description: z.string().optional().describe(\"Project description (max 500 chars)\"),\n repositoryUrl: z.string().describe(\"GitHub repository URL\"),\n },\n },\n async (args) => {\n assertApiKeyPermission(\n mockApiKey,\n ApiKeyPermission.WRITE,\n \"create_personal_project\",\n );\n const validated = CreatePersonalProjectInputSchema.parse(args);\n\n try {\n const result = await apiClient.createPersonalProject(\n validated.name,\n validated.description,\n validated.repositoryUrl,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return handleApiError(error);\n }\n },\n );\n\n server.registerTool(\n \"get_version\",\n {\n description: \"Get the current MTAAP version\",\n },\n async () => {\n assertApiKeyPermission(mockApiKey, 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\n/**\n * Handle API errors and return appropriate MCP response\n */\nfunction handleApiError(error: unknown): {\n content: Array<{ type: string; text: string }>;\n isError: boolean;\n} {\n if (error instanceof ApiError) {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n error: error.message,\n code: error.code,\n status: error.status,\n details: error.details,\n },\n null,\n 2,\n ),\n },\n ],\n isError: true,\n };\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }, null, 2),\n },\n ],\n isError: true,\n };\n}\n\n/**\n * Check for active task file (local operation, no API needed)\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 try {\n await fs.promises.access(activeTaskPath);\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 } catch {\n return {\n hasActiveTask: false,\n task: null,\n };\n }\n}\n","export const VERSION = \"0.2.2\" as const;\n\nexport type Version = typeof VERSION;\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});\n// CUID format: alphanumeric lowercase, typically 25 chars (e.g., cmkiwtmrp0002r6uvdhzzlyta)\n// Also accept prefixed format for backwards compatibility (tsk_, prj_, etc.)\nconst cuidOrPrefixedId = z.string().regex(/^([a-z0-9]+|[a-z]+_[a-zA-Z0-9]+)$/);\nexport const GetTaskInputSchema = z.object({\n taskId: cuidOrPrefixedId,\n});\nexport const AssignTaskInputSchema = z.object({\n projectId: cuidOrPrefixedId,\n taskId: cuidOrPrefixedId,\n expectedState: z.nativeEnum(TaskState).default(TaskState.READY),\n});\nexport const UpdateProgressInputSchema = z.object({\n taskId: cuidOrPrefixedId,\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: cuidOrPrefixedId,\n taskId: cuidOrPrefixedId,\n pullRequestTitle: z.string().min(1).max(300).optional(),\n pullRequestBody: z.string().max(10000).optional(),\n});\nexport const ReportErrorInputSchema = z.object({\n taskId: cuidOrPrefixedId,\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: cuidOrPrefixedId,\n});\nexport const AddNoteInputSchema = z.object({\n taskId: cuidOrPrefixedId,\n content: z.string().min(1).max(500),\n});\nexport const AbandonTaskInputSchema = z.object({\n projectId: cuidOrPrefixedId,\n taskId: cuidOrPrefixedId,\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: cuidOrPrefixedId,\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: cuidOrPrefixedId,\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: cuidOrPrefixedId,\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: cuidOrPrefixedId,\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: cuidOrPrefixedId,\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: cuidOrPrefixedId,\n tags: z.array(z.string()).min(0),\n});\nexport const InviteCollaboratorInputSchema = z.object({\n projectId: cuidOrPrefixedId,\n email: z.string().email(),\n});\nexport const PublishProjectInputSchema = z.object({\n projectId: cuidOrPrefixedId,\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: cuidOrPrefixedId,\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 * MCP API Client\n *\n * HTTP client for communicating with the MTAAP webapp REST API.\n * Replaces direct database access for a lighter, more secure MCP package.\n */\n\nimport {\n TaskState,\n ErrorType,\n} from \"@mtaap/core\";\n\nconst DEFAULT_TIMEOUT = 30000; // 30 seconds\n\n/**\n * API Client Configuration\n */\nexport interface ApiClientConfig {\n baseUrl: string;\n apiKey: string;\n timeout?: number;\n debug?: boolean;\n}\n\n/**\n * Authentication context returned from the API\n */\nexport interface AuthContext {\n userId: string;\n organizationId: string | undefined;\n permissions: string[];\n userName: string;\n userEmail: string;\n}\n\n/**\n * Project from API\n */\nexport interface Project {\n id: string;\n name: string;\n description: string | null;\n type: string;\n origin: string;\n repositoryUrl: string;\n baseBranch: string;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Task from API\n */\nexport interface Task {\n id: string;\n projectId: string;\n projectName: string;\n epicId: string | null;\n epicName: string | null;\n title: string;\n description: string | null;\n state: TaskState;\n priority: string;\n assigneeId: string | null;\n assigneeName: string | null;\n assigneeEmail: string | null;\n createdBy: string;\n createdByName: string | null;\n assignedAt: string | null;\n startedAt: string | null;\n completedAt: string | null;\n branchName: string | null;\n pullRequestUrl: string | null;\n pullRequestNumber: number | null;\n errorType: string | null;\n errorMessage: string | null;\n acceptanceCriteria: Array<{\n id: string;\n description: string;\n completed: boolean;\n completedAt: string | null;\n order: number;\n }>;\n progressUpdates?: Array<{\n id: string;\n message: string;\n checkpoints: string[];\n userId: string;\n createdAt: string;\n }>;\n notes?: Array<{\n id: string;\n content: string;\n userId: string;\n createdAt: string;\n }>;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Project context from API\n */\nexport interface ProjectContext {\n readme: string;\n stack: string[];\n recentCompleted: Array<{\n id: string;\n title: string;\n completedAt: string | null;\n }>;\n conventions: {\n branchPrefix: string;\n commitFormat: string;\n testCommand: string;\n baseBranch: string;\n notes: string;\n };\n}\n\n/**\n * API Error\n */\nexport class ApiError extends Error {\n constructor(\n message: string,\n public code: string,\n public status: number,\n public details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\n/**\n * MCP API Client\n */\nexport class MCPApiClient {\n private baseUrl: string;\n private apiKey: string;\n private timeout: number;\n private debug: boolean;\n private authContext: AuthContext | null = null;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, \"\"); // Remove trailing slash\n this.apiKey = config.apiKey;\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT;\n this.debug = config.debug ?? false;\n }\n\n /**\n * Make an HTTP request to the API\n */\n private async request<T>(\n method: string,\n path: string,\n body?: Record<string, unknown>,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n if (this.debug) {\n console.error(`[mcp-api] ${method} ${url}`);\n }\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": this.apiKey,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n\n if (!response.ok) {\n throw new ApiError(\n data.error || \"API request failed\",\n data.code || \"UNKNOWN_ERROR\",\n response.status,\n data.details,\n );\n }\n\n return data as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof ApiError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new ApiError(\n \"Request timed out\",\n \"TIMEOUT\",\n 408,\n );\n }\n\n throw new ApiError(\n error instanceof Error ? error.message : \"Unknown error\",\n \"NETWORK_ERROR\",\n 0,\n );\n }\n }\n\n /**\n * Authenticate and get user context\n */\n async authenticate(): Promise<AuthContext> {\n const context = await this.request<AuthContext>(\"GET\", \"/api/mcp/auth\");\n this.authContext = context;\n return context;\n }\n\n /**\n * Get cached auth context or authenticate\n */\n async getAuthContext(): Promise<AuthContext> {\n if (this.authContext) {\n return this.authContext;\n }\n return this.authenticate();\n }\n\n /**\n * List accessible projects\n */\n async listProjects(workspaceType: string = \"ALL\"): Promise<Project[]> {\n return this.request<Project[]>(\n \"GET\",\n `/api/mcp/projects?workspaceType=${encodeURIComponent(workspaceType)}`,\n );\n }\n\n /**\n * Get single project details\n */\n async getProject(projectId: string): Promise<Project> {\n return this.request<Project>(\"GET\", `/api/mcp/projects/${projectId}`);\n }\n\n /**\n * Get project context (README, stack, conventions)\n */\n async getProjectContext(projectId: string): Promise<ProjectContext> {\n return this.request<ProjectContext>(\n \"GET\",\n `/api/mcp/projects/${projectId}/context`,\n );\n }\n\n /**\n * Create a personal project\n */\n async createPersonalProject(\n name: string,\n description: string | undefined,\n repositoryUrl: string,\n ): Promise<{ success: boolean; projectId: string }> {\n return this.request<{ success: boolean; projectId: string }>(\n \"POST\",\n \"/api/mcp/projects/personal\",\n { name, description, repositoryUrl },\n );\n }\n\n /**\n * List tasks with optional filters\n */\n async listTasks(filters: {\n projectId?: string;\n state?: TaskState;\n assigneeId?: string;\n } = {}): Promise<Task[]> {\n const params = new URLSearchParams();\n if (filters.projectId) params.set(\"projectId\", filters.projectId);\n if (filters.state) params.set(\"state\", filters.state);\n if (filters.assigneeId) params.set(\"assigneeId\", filters.assigneeId);\n\n const queryString = params.toString();\n const path = queryString ? `/api/mcp/tasks?${queryString}` : \"/api/mcp/tasks\";\n\n return this.request<Task[]>(\"GET\", path);\n }\n\n /**\n * Get full task details\n */\n async getTask(taskId: string): Promise<Task> {\n return this.request<Task>(\"GET\", `/api/mcp/tasks/${taskId}`);\n }\n\n /**\n * Assign task to current user and create branch\n */\n async assignTask(\n taskId: string,\n projectId: string,\n expectedState: TaskState = TaskState.READY,\n ): Promise<{\n success: boolean;\n taskId: string;\n branchName?: string;\n currentState?: string;\n message?: string;\n }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/assign`, {\n projectId,\n expectedState,\n });\n }\n\n /**\n * Update task progress\n */\n async updateProgress(\n taskId: string,\n data: {\n statusMessage?: string;\n completedCheckpointIds?: string[];\n currentCheckpointIndex?: number;\n },\n ): Promise<{ success: boolean; taskId: string }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/progress`, data);\n }\n\n /**\n * Complete task and create PR\n */\n async completeTask(\n taskId: string,\n projectId: string,\n pullRequestTitle?: string,\n pullRequestBody?: string,\n ): Promise<{\n success: boolean;\n taskId: string;\n prUrl?: string;\n prNumber?: number;\n }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/complete`, {\n projectId,\n pullRequestTitle,\n pullRequestBody,\n });\n }\n\n /**\n * Abandon task and optionally delete branch\n */\n async abandonTask(\n taskId: string,\n projectId: string,\n deleteBranch: boolean = false,\n ): Promise<{\n success: boolean;\n taskId: string;\n state: string;\n branchDeleted: boolean;\n }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/abandon`, {\n projectId,\n deleteBranch,\n });\n }\n\n /**\n * Report task error\n */\n async reportError(\n taskId: string,\n errorType: ErrorType,\n errorMessage: string,\n context?: string,\n ): Promise<{ success: boolean; taskId: string }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/error`, {\n errorType,\n errorMessage,\n context,\n });\n }\n\n /**\n * Add note to task\n */\n async addNote(\n taskId: string,\n content: string,\n ): Promise<{ success: boolean; noteId: string }> {\n return this.request(\"POST\", `/api/mcp/tasks/${taskId}/notes`, { content });\n }\n\n /**\n * Get GitHub token\n */\n async getGitHubToken(\n organizationId?: string,\n ): Promise<{ token: string; source: string }> {\n const path = organizationId\n ? `/api/mcp/github-token?organizationId=${encodeURIComponent(organizationId)}`\n : \"/api/mcp/github-token\";\n return this.request(\"GET\", path);\n }\n}\n\n/**\n * Create API client from environment variables\n */\nexport function createApiClientFromEnv(): MCPApiClient {\n const baseUrl = process.env.MTAAP_BASE_URL;\n const apiKey = process.env.MTAAP_API_KEY;\n\n if (!baseUrl) {\n throw new Error(\"MTAAP_BASE_URL environment variable is required\");\n }\n\n if (!apiKey) {\n throw new Error(\"MTAAP_API_KEY environment variable is required\");\n }\n\n return new MCPApiClient({\n baseUrl,\n apiKey,\n debug: process.env.MTAAP_DEBUG === \"true\",\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\" | ApiKeyPermission | null;\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","#!/usr/bin/env node\n\nimport { createMCPServer } from \"./index.js\";\nimport { VERSION } from \"./version.js\";\n\n/**\n * CLI entry point for the MTAAP MCP server.\n * Validates environment, starts the server, and handles graceful shutdown.\n */\n\nfunction handleCliFlags(): void {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--version\") || args.includes(\"-v\")) {\n console.log(`mtaap-mcp v${VERSION}`);\n process.exit(0);\n }\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n console.log(`mtaap-mcp v${VERSION}\n\nMTAAP MCP Server - Model Context Protocol server for MTAAP\n\nUsage:\n mtaap-mcp [options]\n\nOptions:\n -v, --version Show version number\n -h, --help Show this help message\n\nEnvironment Variables:\n MTAAP_API_KEY Your MTAAP API key (required)\n MTAAP_BASE_URL MTAAP webapp URL (required)\n\nExample mcp.json configuration:\n{\n \"mcpServers\": {\n \"mtaap\": {\n \"command\": \"npx\",\n \"args\": [\"@mtaap/mcp\"],\n \"env\": {\n \"MTAAP_API_KEY\": \"usr_your_api_key_here\",\n \"MTAAP_BASE_URL\": \"https://collab.mtaap.de\"\n }\n }\n }\n}`);\n process.exit(0);\n }\n}\n\nfunction validateEnvironment(): void {\n const errors: string[] = [];\n\n // Required: MTAAP_API_KEY\n if (!process.env.MTAAP_API_KEY) {\n errors.push(\n \"MTAAP_API_KEY is required. Generate one at https://collab.mtaap.de/settings/api-keys\",\n );\n }\n\n // Required: MTAAP_BASE_URL\n if (!process.env.MTAAP_BASE_URL) {\n errors.push(\n \"MTAAP_BASE_URL is required. Set to https://collab.mtaap.de for cloud or your self-hosted URL.\",\n );\n }\n\n // Exit if there are errors\n if (errors.length > 0) {\n for (const error of errors) {\n console.error(`[mtaap-mcp] Error: ${error}`);\n }\n console.error(\"\\nRequired environment variables:\");\n console.error(\" MTAAP_API_KEY Your MTAAP API key\");\n console.error(\" MTAAP_BASE_URL MTAAP webapp URL (e.g., https://collab.mtaap.de)\");\n console.error(\"\\nExample mcp.json configuration:\");\n console.error(`{\n \"mcpServers\": {\n \"mtaap\": {\n \"command\": \"npx\",\n \"args\": [\"@mtaap/mcp\"],\n \"env\": {\n \"MTAAP_API_KEY\": \"usr_your_api_key_here\",\n \"MTAAP_BASE_URL\": \"https://collab.mtaap.de\"\n }\n }\n }\n}`);\n process.exit(1);\n }\n\n // Validate URL format\n try {\n new URL(process.env.MTAAP_BASE_URL!);\n } catch {\n console.error(`[mtaap-mcp] Error: MTAAP_BASE_URL is not a valid URL: ${process.env.MTAAP_BASE_URL}`);\n process.exit(1);\n }\n}\n\nasync function checkConnectivity(): Promise<void> {\n const baseUrl = process.env.MTAAP_BASE_URL!;\n console.error(`[mtaap-mcp] Checking connectivity to ${baseUrl}...`);\n\n try {\n const response = await fetch(`${baseUrl}/api/mcp/auth`, {\n method: \"GET\",\n headers: {\n \"X-API-Key\": process.env.MTAAP_API_KEY!,\n },\n signal: AbortSignal.timeout(10000), // 10 second timeout\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n if (response.status === 401) {\n console.error(\"[mtaap-mcp] Error: Invalid or expired API key\");\n process.exit(1);\n }\n console.error(`[mtaap-mcp] Error: API returned ${response.status}: ${data.error || \"Unknown error\"}`);\n process.exit(1);\n }\n\n console.error(\"[mtaap-mcp] Connected successfully\");\n } catch (error) {\n if (error instanceof Error && error.name === \"TimeoutError\") {\n console.error(`[mtaap-mcp] Error: Connection timed out to ${baseUrl}`);\n } else {\n console.error(`[mtaap-mcp] Error: Could not connect to ${baseUrl}`);\n console.error(`[mtaap-mcp] Details: ${error instanceof Error ? error.message : String(error)}`);\n }\n process.exit(1);\n }\n}\n\nasync function main(): Promise<void> {\n handleCliFlags();\n\n console.error(\"[mtaap-mcp] Starting MTAAP MCP server...\");\n\n validateEnvironment();\n await checkConnectivity();\n\n try {\n await createMCPServer();\n console.error(\"[mtaap-mcp] Server started successfully\");\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`[mtaap-mcp] Failed to start server: ${message}`);\n process.exit(1);\n }\n}\n\n// Graceful shutdown handling\nfunction setupShutdownHandlers(): void {\n const shutdown = (signal: string): void => {\n console.error(`[mtaap-mcp] Received ${signal}, shutting down...`);\n process.exit(0);\n };\n\n process.on(\"SIGINT\", () => shutdown(\"SIGINT\"));\n process.on(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n\n // Handle uncaught exceptions\n process.on(\"uncaughtException\", (error) => {\n console.error(\"[mtaap-mcp] Uncaught exception:\", error.message);\n process.exit(1);\n });\n\n // Handle unhandled promise rejections\n process.on(\"unhandledRejection\", (reason) => {\n const message = reason instanceof Error ? reason.message : String(reason);\n console.error(\"[mtaap-mcp] Unhandled rejection:\", message);\n process.exit(1);\n });\n}\n\nsetupShutdownHandlers();\nmain();\n"],"mappings":"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","names":["import_zod","TaskState","UserRole","ProjectType","ProjectOrigin","TaskPriority","DeploymentMode","ErrorType","PRStatus","PricingTier","ApiKeyPermission","WebSocketEventType","AuthProvider","SubscriptionStatus","EventType","VERSION","VERSION","import_zod","metrics","labelsToKey","config"]}
|