@task-boards/mcp-server 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/build/cli.js +1735 -1085
  2. package/build/cli.js.map +4 -4
  3. package/package.json +1 -1
package/build/cli.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../api/src/api-prefix.ts", "../../api/build/api-routes.js", "../../api/src/enums/work-item-type.enum.ts", "../../api/src/enums/subagent-role.enum.ts", "../../api/src/enums/agent-role.enum.ts", "../../api/src/enums/agent-run-outcome.enum.ts", "../../api/src/enums/workflow-phase.enum.ts", "../../api/src/enums/agent-run-status.enum.ts", "../../api/src/enums/board-preset-code.enum.ts", "../../api/src/enums/changed-by-type.enum.ts", "../../api/src/enums/estimation-mode.enum.ts", "../../api/src/enums/task-card-estimation-display.enum.ts", "../../api/src/enums/priority.enum.ts", "../../api/src/enums/label-color.enum.ts", "../../api/src/enums/sprint-status.enum.ts", "../../api/src/enums/sprint-scope-mutation.enum.ts", "../../api/src/labels/labels.api.ts", "../../api/build/labels/labels.types.js", "../../api/src/labels/index.ts", "../../api/src/sprints/sprints.api.ts", "../../api/src/sprints/sprints.types.ts", "../../api/src/sprints/index.ts", "../../api/src/project-subagents/project-subagents.api.ts", "../../api/src/project-subagents/project-subagents.types.ts", "../../api/src/project-subagents/index.ts", "../../api/src/project-webhooks/project-webhooks.api.ts", "../../api/src/project-webhooks/project-webhooks.enums.ts", "../../api/build/project-webhooks/project-webhooks.types.js", "../../api/src/project-webhooks/index.ts", "../../api/src/boards/boards.api.ts", "../../api/src/boards/boards.consts.ts", "../../api/build/boards/boards.types.js", "../../api/build/types/wire-types.js", "../../api/build/types/pagination.types.js", "../../api/src/projects/projects.api.ts", "../../api/src/projects/projects.types.ts", "../../api/build/projects/project-binding.types.js", "../../api/src/work-items/work-items.api.ts", "../../api/src/work-items/work-items.consts.ts", "../../api/src/work-items/work-items.types.ts", "../../api/src/git-release/git-release.api.ts", "../../api/build/git-release/git-release.types.js", "../../api/src/git-release/index.ts", "../../api/src/attachments/attachments.api.ts", "../../api/src/attachments/index.ts", "../../api/src/comments/comments.api.ts", "../../api/src/comments/comments.types.ts", "../../api/src/comments/index.ts", "../../api/src/feedback/feedback.api.ts", "../../api/src/feedback/feedback.enum.ts", "../../api/build/feedback/feedback.types.js", "../../api/src/feedback/index.ts", "../../api/src/notifications/notifications.api.ts", "../../api/src/notifications/notifications.enum.ts", "../../api/build/notifications/notifications.types.js", "../../api/src/notifications/index.ts", "../../api/src/agent-runs/agent-runs.api.ts", "../../api/build/agent-runs/agent-runs.types.js", "../../api/src/index.ts", "../../shared/src/board-presets/init-board-preset-definitions.ts", "../../shared/src/board-presets/index.ts", "../../shared/src/internal/subscriptions/subscription-tier.enum.ts", "../../shared/src/subscriptions/init-pricing-plan-seeds.ts", "../../shared/src/subscriptions/index.ts", "../../shared/src/internal/auth/auth.api.ts", "../../shared/src/internal/auth/auth.types.ts", "../../shared/src/internal/auth/staff-capability.enum.ts", "../../shared/src/internal/auth/staff-role.enum.ts", "../../shared/src/internal/auth/staff-role-capabilities.const.ts", "../../shared/src/internal/auth/user-kind.enum.ts", "../../shared/src/internal/auth/service-user.consts.ts", "../../shared/src/internal/auth/password-policy.util.ts", "../../shared/src/internal/auth/index.ts", "../../shared/src/internal/account/account.api.ts", "../../shared/src/internal/account/index.ts", "../../shared/src/internal/api-tokens/api-tokens.api.ts", "../../shared/build/internal/api-tokens/api-tokens.types.js", "../../shared/src/internal/enums/api-token-scope.enum.ts", "../../shared/src/internal/members/members.api.ts", "../../shared/build/internal/members/members.types.js", "../../shared/src/internal/members/invitations.enums.ts", "../../shared/src/internal/imports/imports.api.ts", "../../shared/build/internal/imports/imports.types.js", "../../shared/src/internal/imports/imports.enums.ts", "../../shared/src/internal/imports/index.ts", "../../shared/src/internal/exceptions/exception-codes.ts", "../../shared/src/internal/health/health.api.ts", "../../shared/src/internal/health/health.types.ts", "../../shared/src/internal/health/index.ts", "../../shared/src/internal/admin/admin.api.ts", "../../shared/src/internal/admin/admin-notification-channel.enum.ts", "../../shared/src/internal/admin/admin-notification-settings.api.ts", "../../shared/src/internal/admin/admin-users.api.ts", "../../shared/src/internal/admin/admin-users.consts.ts", "../../shared/build/internal/admin/admin.types.js", "../../shared/src/internal/admin/index.ts", "../../shared/src/internal/subscriptions/subscription-source.enum.ts", "../../shared/src/internal/subscriptions/subscription-audit-action.enum.ts", "../../shared/src/internal/subscriptions/pricing-commitment-months.ts", "../../shared/src/internal/subscriptions/subscriptions.api.ts", "../../shared/src/internal/subscriptions/admin-subscriptions.api.ts", "../../shared/src/internal/subscriptions/index.ts", "../../shared/src/internal/index.ts", "../../shared/src/realtime/realtime.consts.ts", "../../shared/src/realtime/realtime.events.ts", "../../shared/build/realtime/realtime.types.js", "../../shared/src/work-items/work-items.display-key.util.ts", "../../shared/src/git/story-branch.util.ts", "../../shared/src/git/work-item-commit.util.ts", "../../shared/src/subagent-role/subagent-role-bindings.normalize.ts", "../../shared/src/subagent-role/subagent-role.util.ts", "../../shared/src/workflows/workflow-phase-subagent-role.map.ts", "../../shared/src/workflows/agentic-sdlc-phase-chain.ts", "../../shared/src/workflows/agentic-sdlc.workflow.ts", "../../shared/src/workflows/column-slug-mapping.ts", "../../shared/src/workflows/index.ts", "../../shared/src/subagent-role/subagent-role-labels.ts", "../../shared/src/subagent-role/subagent-role-bindings.util.ts", "../../shared/src/subagent-role/project-agents.util.ts", "../../shared/src/subagent-role/index.ts", "../../shared/src/subagent/builtin-ide-subagents.const.ts", "../../shared/src/subagent/subagent-llm-input.validator.ts", "../../shared/src/subagent/subagent-llm-output.validator.ts", "../../shared/src/subagent/subagent-preview-mode.enum.ts", "../../shared/src/subagent/slug.util.ts", "../../shared/src/subagent/subagent-definition.builder.ts", "../../shared/src/subagent/index.ts", "../../shared/src/tenancy/tenancy.consts.ts", "../../shared/src/tenancy/index.ts", "../../shared/src/mcp-data-protection/mcp-sensitive-data.util.ts", "../../shared/src/mcp-data-protection/sanitize-mcp-tool-result.util.ts", "../../shared/src/mcp-data-protection/index.ts", "../../shared/src/index.ts", "../src/index.ts", "../src/config.ts", "../src/rest-client.ts", "../src/tool-runtime.ts", "../src/tools/agent-runs.ts", "../src/tools/orchestrator-hints.ts", "../src/tools/orchestrator-attention.util.ts", "../src/tools/tool-utils.ts", "../src/workspace/workspace-error.ts", "../src/tools/wait-for-agent-runs.ts", "../src/tools/orchestrator.ts", "../src/workspace/resolve-project.ts", "../src/workspace/normalize-token.ts", "../src/workspace/auto-match-project.ts", "../src/workspace/parse-ide-rules.ts", "../src/workspace/parse-task-boards-yaml.ts", "../src/workspace/resolve-workspace-root.ts", "../src/tools/attachments.ts", "../src/attachments/detect-mime-type.ts", "../src/attachments/staging.util.ts", "../src/workspace/confine-file-path.ts", "../src/tools/board.ts", "../src/tools/comments.ts", "../src/tools/labels.ts", "../src/tools/projects.ts", "../src/tools/resolve-project.ts", "../src/tools/sync-git-releases.ts", "../src/git/commit-release-sync.ts", "../src/git/git-runner.ts", "../src/git/story-branch.util.ts", "../src/git/work-item-commit.util.ts", "../src/tools/sync-project-subagents.ts", "../src/subagents/sync-project-subagents.ts", "../src/tools/work-items.ts", "../src/tools/index.ts", "../src/cli.ts"],
4
- "sourcesContent": ["/**\n * HTTP path segment after backend context.\n * Nest `setGlobalPrefix`, frontend `apiFetch`, and MCP `baseURL` all prepend this value.\n * `*_ROUTES` in `*.api.ts` return paths relative to this prefix (module segment only).\n */\nexport const API_V1_PREFIX = \"/api/v1\";\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=api-routes.js.map", "export const WORK_ITEM_TYPE = {\n EPIC: \"EPIC\",\n STORY: \"STORY\",\n SUBTASK: \"SUBTASK\"\n} as const;\n\nexport type WorkItemType = (typeof WORK_ITEM_TYPE)[keyof typeof WORK_ITEM_TYPE];\n", "export const SUBAGENT_ROLE = {\n PRODUCT: \"PRODUCT\",\n ARCHITECT: \"ARCHITECT\",\n ANALYST: \"ANALYST\",\n DESIGNER: \"DESIGNER\",\n FRONTEND_DEVELOPER: \"FRONTEND_DEVELOPER\",\n DEVELOPER: \"DEVELOPER\",\n QA: \"QA\",\n ORCHESTRATOR: \"ORCHESTRATOR\"\n} as const;\n\nexport type SubagentRole = (typeof SUBAGENT_ROLE)[keyof typeof SUBAGENT_ROLE];\n", "/** @deprecated Use SUBAGENT_ROLE and SubagentRole from subagent-role.enum */\nexport { SUBAGENT_ROLE as AGENT_ROLE, type SubagentRole as AgentRole } from \"./subagent-role.enum\";\n\nexport { SUBAGENT_ROLE, type SubagentRole } from \"./subagent-role.enum\";\n", "export const AGENT_RUN_OUTCOME = {\n DEFAULT: \"DEFAULT\",\n SKIP_DESIGN: \"SKIP_DESIGN\",\n HAS_BUGS: \"HAS_BUGS\",\n NEEDS_CLARIFICATION: \"NEEDS_CLARIFICATION\",\n FAILED: \"FAILED\"\n} as const;\n\nexport type AgentRunOutcome = (typeof AGENT_RUN_OUTCOME)[keyof typeof AGENT_RUN_OUTCOME];\n", "export const WORKFLOW_PHASE = {\n PRODUCT: \"PRODUCT\",\n ANALYST: \"ANALYST\",\n ARCHITECT: \"ARCHITECT\",\n DESIGNER: \"DESIGNER\",\n DEVELOPMENT: \"DEVELOPMENT\"\n} as const;\n\nexport type WorkflowPhase = (typeof WORKFLOW_PHASE)[keyof typeof WORKFLOW_PHASE];\n", "export const AGENT_RUN_STATUS = {\n PENDING: \"PENDING\",\n DISPATCHED: \"DISPATCHED\",\n ACKNOWLEDGED: \"ACKNOWLEDGED\",\n COMPLETED: \"COMPLETED\",\n FAILED: \"FAILED\",\n SKIPPED: \"SKIPPED\",\n CANCELLED: \"CANCELLED\"\n} as const;\n\nexport type AgentRunStatus = (typeof AGENT_RUN_STATUS)[keyof typeof AGENT_RUN_STATUS];\n", "export const BOARD_PRESET_CODE = {\n KANBAN: \"KANBAN\",\n SCRUM: \"SCRUM\",\n AGENTIC_SDLC: \"AGENTIC_SDLC\"\n} as const;\n\nexport type BoardPresetCode = (typeof BOARD_PRESET_CODE)[keyof typeof BOARD_PRESET_CODE];\n", "export const CHANGED_BY_TYPE = {\n HUMAN: \"HUMAN\",\n AGENT: \"AGENT\",\n MCP: \"MCP\",\n GIT: \"GIT\"\n} as const;\n\nexport type ChangedByType = (typeof CHANGED_BY_TYPE)[keyof typeof CHANGED_BY_TYPE];\n", "export const ESTIMATION_MODE = {\n STORY_POINTS: \"storyPoints\",\n ESTIMATE: \"estimate\"\n} as const;\n\nexport type EstimationMode = (typeof ESTIMATION_MODE)[keyof typeof ESTIMATION_MODE];\n", "export const TASK_CARD_ESTIMATION_DISPLAY = {\n STORY_POINTS: \"storyPoints\",\n ESTIMATE: \"estimate\",\n NONE: \"none\"\n} as const;\n\nexport type TaskCardEstimationDisplay =\n (typeof TASK_CARD_ESTIMATION_DISPLAY)[keyof typeof TASK_CARD_ESTIMATION_DISPLAY];\n", "export const PRIORITY = {\n CRITICAL: \"CRITICAL\",\n HIGH: \"HIGH\",\n MEDIUM: \"MEDIUM\",\n LOW: \"LOW\"\n} as const;\n\nexport type Priority = (typeof PRIORITY)[keyof typeof PRIORITY];\n", "export const LABEL_COLOR = {\n GRAY: \"GRAY\",\n BLUE: \"BLUE\",\n GREEN: \"GREEN\",\n YELLOW: \"YELLOW\",\n ORANGE: \"ORANGE\",\n RED: \"RED\",\n PURPLE: \"PURPLE\",\n PINK: \"PINK\",\n TEAL: \"TEAL\",\n CYAN: \"CYAN\",\n BROWN: \"BROWN\",\n LIME: \"LIME\"\n} as const;\n\nexport type LabelColor = (typeof LABEL_COLOR)[keyof typeof LABEL_COLOR];\n", "export const SPRINT_STATUS = {\n PLANNED: \"PLANNED\",\n ACTIVE: \"ACTIVE\",\n CLOSED: \"CLOSED\"\n} as const;\n\nexport type SprintStatus = (typeof SPRINT_STATUS)[keyof typeof SPRINT_STATUS];\n", "export const SPRINT_SCOPE_MUTATION = {\n ADD: \"ADD\",\n REMOVE: \"REMOVE\"\n} as const;\n\nexport type SprintScopeMutation = (typeof SPRINT_SCOPE_MUTATION)[keyof typeof SPRINT_SCOPE_MUTATION];\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { CreateLabelRequest, LabelListResponse, LabelResponse, UpdateLabelRequest } from \"./labels.types\";\n\n/**\n * Project label definitions (CRUD).\n */\nexport interface LabelsApi {\n /** List labels for a project. */\n listLabels(projectId: string): Promise<LabelListResponse>;\n\n /** Create a label. Requires write access. */\n createLabel(projectId: string, body: CreateLabelRequest): Promise<LabelResponse>;\n\n /** Update a label. Requires write access. */\n updateLabel(projectId: string, labelId: string, body: UpdateLabelRequest): Promise<LabelResponse>;\n\n /** Delete a label and detach from work items. Requires write access. */\n deleteLabel(projectId: string, labelId: string): Promise<void>;\n}\n\nexport const LABELS_ROUTES: APIRoutes<LabelsApi> = {\n listLabels: (projectId: string): string => `/projects/${projectId}/labels`,\n createLabel: (projectId: string): string => `/projects/${projectId}/labels`,\n updateLabel: (projectId: string, labelId: string): string => `/projects/${projectId}/labels/${labelId}`,\n deleteLabel: (projectId: string, labelId: string): string => `/projects/${projectId}/labels/${labelId}`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=labels.types.js.map", "export * from \"./labels.api\";\nexport * from \"./labels.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateSprintRequest,\n SprintBurndownResponse,\n SprintDetailResponse,\n SprintListResponse,\n SprintResponse,\n SprintScopeMutationRequest,\n UpdateSprintRequest\n} from \"./sprints.types\";\n\n/**\n * Project sprint definitions (CRUD, activate, scope).\n */\nexport interface SprintsApi {\n /** List sprints for a project. */\n listSprints(projectId: string): Promise<SprintListResponse>;\n\n /** Create a sprint. Requires write access. */\n createSprint(projectId: string, body: CreateSprintRequest): Promise<SprintResponse>;\n\n /** Get sprint detail including scope work item ids. */\n getSprint(projectId: string, sprintId: string): Promise<SprintDetailResponse>;\n\n /** Update a sprint. Requires write access. */\n updateSprint(projectId: string, sprintId: string, body: UpdateSprintRequest): Promise<SprintResponse>;\n\n /** Delete a sprint. Requires write access. */\n deleteSprint(projectId: string, sprintId: string): Promise<void>;\n\n /** Activate sprint; closes previous ACTIVE sprint for the project. */\n activateSprint(projectId: string, sprintId: string): Promise<SprintResponse>;\n\n /** Add stories to sprint scope. */\n addSprintScope(projectId: string, sprintId: string, body: SprintScopeMutationRequest): Promise<SprintDetailResponse>;\n\n /** Remove stories from sprint scope. */\n removeSprintScope(\n projectId: string,\n sprintId: string,\n body: SprintScopeMutationRequest\n ): Promise<SprintDetailResponse>;\n\n /** Story-count burndown for the active sprint. */\n getActiveSprintBurndown(projectId: string): Promise<SprintBurndownResponse>;\n}\n\nexport const SPRINTS_ROUTES: APIRoutes<SprintsApi> = {\n listSprints: (projectId: string): string => `/projects/${projectId}/sprints`,\n createSprint: (projectId: string): string => `/projects/${projectId}/sprints`,\n getSprint: (projectId: string, sprintId: string): string => `/projects/${projectId}/sprints/${sprintId}`,\n updateSprint: (projectId: string, sprintId: string): string => `/projects/${projectId}/sprints/${sprintId}`,\n deleteSprint: (projectId: string, sprintId: string): string => `/projects/${projectId}/sprints/${sprintId}`,\n activateSprint: (projectId: string, sprintId: string): string =>\n `/projects/${projectId}/sprints/${sprintId}/activate`,\n addSprintScope: (projectId: string, sprintId: string): string =>\n `/projects/${projectId}/sprints/${sprintId}/scope/add`,\n removeSprintScope: (projectId: string, sprintId: string): string =>\n `/projects/${projectId}/sprints/${sprintId}/scope/remove`,\n getActiveSprintBurndown: (projectId: string): string => `/projects/${projectId}/sprints/active/burndown`\n};\n", "import type { SprintStatus } from \"../enums/sprint-status.enum\";\nimport type { IsoDateTimeString, LocalDateString } from \"../types/wire-types\";\n\nexport interface SprintResponse {\n id: string;\n projectId: string;\n name: string;\n goal: string | null;\n startDate: LocalDateString;\n endDate: LocalDateString;\n status: SprintStatus;\n activatedAt: IsoDateTimeString | null;\n closedAt: IsoDateTimeString | null;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface SprintDetailResponse extends SprintResponse {\n /** Work item ids currently in sprint scope (STORY only). */\n scopeWorkItemIds: string[];\n}\n\nexport interface SprintListResponse {\n items: SprintResponse[];\n}\n\nexport interface CreateSprintRequest {\n name: string;\n startDate: LocalDateString;\n endDate: LocalDateString;\n goal?: string | null;\n}\n\nexport interface UpdateSprintRequest {\n name?: string;\n startDate?: LocalDateString;\n endDate?: LocalDateString;\n goal?: string | null;\n}\n\nexport interface SprintScopeMutationRequest {\n workItemIds: string[];\n}\n\nexport const BURNDOWN_METRIC = {\n STORY_COUNT: \"story_count\"\n} as const;\n\nexport type BurndownMetric = (typeof BURNDOWN_METRIC)[keyof typeof BURNDOWN_METRIC];\n\nexport interface BurndownPoint {\n date: LocalDateString;\n remaining: number;\n}\n\nexport interface SprintBurndownResponse {\n sprintId: string;\n sprintName: string;\n startDate: LocalDateString;\n endDate: LocalDateString;\n metric: BurndownMetric;\n todayRemaining: number;\n actualLine: BurndownPoint[];\n idealLine: BurndownPoint[];\n}\n", "export * from \"./sprints.api\";\nexport * from \"./sprints.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateSubagentRequest,\n PreviewSubagentRequest,\n PreviewSubagentResponse,\n SubagentListResponse,\n SubagentResponse,\n UpdateSubagentRequest\n} from \"./project-subagents.types\";\n\n/**\n * Project-scoped custom IDE subagent definitions (CRUD + preview).\n */\nexport interface ProjectSubagentsApi {\n /** List custom subagents for a project. */\n listSubagents(projectId: string): Promise<SubagentListResponse>;\n\n /** Preview slug and generated markdown without persisting. */\n previewSubagent(projectId: string, body: PreviewSubagentRequest): Promise<PreviewSubagentResponse>;\n\n /** Create a custom subagent. Requires write access. */\n createSubagent(projectId: string, body: CreateSubagentRequest): Promise<SubagentResponse>;\n\n /** Get a custom subagent by id. */\n getSubagent(projectId: string, subagentId: string): Promise<SubagentResponse>;\n\n /** Update a custom subagent. Slug is immutable. Requires write access. */\n updateSubagent(projectId: string, subagentId: string, body: UpdateSubagentRequest): Promise<SubagentResponse>;\n\n /** Delete a custom subagent. Blocked when slug is referenced in role bindings. Requires write access. */\n deleteSubagent(projectId: string, subagentId: string): Promise<void>;\n}\n\nexport const PROJECT_SUBAGENTS_ROUTES: APIRoutes<ProjectSubagentsApi> = {\n listSubagents: (projectId: string): string => `/projects/${projectId}/subagents`,\n previewSubagent: (projectId: string): string => `/projects/${projectId}/subagents/preview`,\n createSubagent: (projectId: string): string => `/projects/${projectId}/subagents`,\n getSubagent: (projectId: string, subagentId: string): string => `/projects/${projectId}/subagents/${subagentId}`,\n updateSubagent: (projectId: string, subagentId: string): string => `/projects/${projectId}/subagents/${subagentId}`,\n deleteSubagent: (projectId: string, subagentId: string): string => `/projects/${projectId}/subagents/${subagentId}`\n};\n", "import type { SubagentRole } from \"../enums/subagent-role.enum\";\nimport type { IsoDateTimeString } from \"../types/wire-types\";\n\nexport const SUBAGENT_PREVIEW_MODE = {\n TEMPLATE: \"TEMPLATE\",\n LLM: \"LLM\"\n} as const;\n\nexport type SubagentPreviewMode = (typeof SUBAGENT_PREVIEW_MODE)[keyof typeof SUBAGENT_PREVIEW_MODE];\n\nexport interface SubagentResponse {\n id: string;\n projectId: string;\n slug: string;\n name: string;\n description: string;\n bodyMarkdown: string;\n sourcePrompt: string | null;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface SubagentCapabilities {\n llmGenerationAvailable: boolean;\n}\n\nexport interface SubagentListResponse {\n items: SubagentResponse[];\n capabilities: SubagentCapabilities;\n}\n\nexport interface PreviewSubagentRequest {\n name: string;\n basePrompt: string;\n description?: string | null;\n /** Defaults to {@link SUBAGENT_PREVIEW_MODE.TEMPLATE}. */\n mode?: SubagentPreviewMode;\n}\n\nexport interface PreviewSubagentGenerationMeta {\n model: string;\n latencyMs: number;\n}\n\nexport interface PreviewSubagentResponse {\n slug: string;\n name: string;\n description: string;\n bodyMarkdown: string;\n /** Full file content for `.cursor/agents/<slug>.md`. */\n fileContent: string;\n mode: SubagentPreviewMode;\n generationMeta?: PreviewSubagentGenerationMeta;\n}\n\nexport interface CreateSubagentRequest {\n name: string;\n basePrompt: string;\n description?: string | null;\n /** Optional override of generated body; normally omitted. */\n bodyMarkdown?: string;\n}\n\nexport interface UpdateSubagentRequest {\n name?: string;\n description?: string | null;\n basePrompt?: string;\n bodyMarkdown?: string;\n}\n\nexport const SUBAGENT_DELETE_BLOCK_REASON = {\n IN_USE: \"IN_USE\",\n FORBIDDEN: \"FORBIDDEN\"\n} as const;\n\nexport type SubagentDeleteBlockReason =\n (typeof SUBAGENT_DELETE_BLOCK_REASON)[keyof typeof SUBAGENT_DELETE_BLOCK_REASON];\n\nexport interface SubagentDeleteBlockResponse {\n canDelete: false;\n blockReason: SubagentDeleteBlockReason;\n /** Roles referencing this slug when blockReason is IN_USE. */\n usedByRoles: SubagentRole[];\n}\n", "export * from \"./project-subagents.api\";\nexport * from \"./project-subagents.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n ProjectWebhookConfigResponse,\n TestProjectWebhookResponse,\n UpdateProjectWebhookConfigRequest\n} from \"./project-webhooks.types\";\n\n/**\n * Project-scoped outbound HTTPS webhook configuration (PRO+ OWNER, human session only).\n */\nexport interface ProjectWebhooksApi {\n getWebhookConfig(projectId: string): Promise<ProjectWebhookConfigResponse>;\n\n updateWebhookConfig(\n projectId: string,\n body: UpdateProjectWebhookConfigRequest\n ): Promise<ProjectWebhookConfigResponse>;\n\n testWebhook(projectId: string): Promise<TestProjectWebhookResponse>;\n}\n\nexport const PROJECT_WEBHOOKS_ROUTES: APIRoutes<ProjectWebhooksApi> = {\n getWebhookConfig: (projectId: string): string => `/projects/${projectId}/webhook-config`,\n updateWebhookConfig: (projectId: string): string => `/projects/${projectId}/webhook-config`,\n testWebhook: (projectId: string): string => `/projects/${projectId}/webhook-config/test`\n};\n", "export const WEBHOOK_EVENT_TYPE = {\n AGENT_RUN_COMPLETED: \"agent_run.completed\",\n WORK_ITEM_MOVED_TO_IN_AWAITING: \"work_item.moved_to_in_awaiting\",\n WEBHOOK_TEST: \"webhook.test\"\n} as const;\n\nexport type WebhookEventType = (typeof WEBHOOK_EVENT_TYPE)[keyof typeof WEBHOOK_EVENT_TYPE];\n\nexport const WEBHOOK_DELIVERY_STATUS = {\n PENDING: \"pending\",\n RETRY_SCHEDULED: \"retry_scheduled\",\n SUCCEEDED: \"succeeded\",\n FAILED_PERMANENT: \"failed_permanent\"\n} as const;\n\nexport type WebhookDeliveryStatus = (typeof WEBHOOK_DELIVERY_STATUS)[keyof typeof WEBHOOK_DELIVERY_STATUS];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=project-webhooks.types.js.map", "export * from \"./project-webhooks.api\";\nexport * from \"./project-webhooks.enums\";\nexport * from \"./project-webhooks.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n BoardPresetListResponse,\n BoardResponse,\n CreateBoardColumnRequest,\n CreateBoardColumnResponse,\n DeleteBoardColumnResponse,\n ReorderBoardColumnsRequest,\n ReorderBoardColumnsResponse\n} from \"./boards.types\";\n\n/**\n * Boards REST API contract.\n */\nexport interface BoardApi {\n /** Get board projection for a project (columns + on-board work items). */\n getBoard(projectId: string): Promise<BoardResponse>;\n\n /** List available board presets. */\n listBoardPresets(): Promise<BoardPresetListResponse>;\n\n /** Create custom column at end of board. OWNER only. */\n createColumn(projectId: string, body: CreateBoardColumnRequest): Promise<CreateBoardColumnResponse>;\n\n /** Delete custom column; stories migrate to backlog. OWNER only. */\n deleteColumn(projectId: string, columnId: string): Promise<DeleteBoardColumnResponse>;\n\n /** Reorder board columns. Non-VIEWER only; backlog must stay first. */\n reorderColumns(projectId: string, body: ReorderBoardColumnsRequest): Promise<ReorderBoardColumnsResponse>;\n}\n\nexport const BOARD_PRESETS_PREFIX = \"/board-presets\";\n\nexport const BOARDS_ROUTES: APIRoutes<BoardApi> = {\n getBoard: (projectId: string): string => `/projects/${projectId}/board`,\n listBoardPresets: (): string => BOARD_PRESETS_PREFIX,\n createColumn: (projectId: string): string => `/projects/${projectId}/board/columns`,\n deleteColumn: (projectId: string, columnId: string): string => `/projects/${projectId}/board/columns/${columnId}`,\n reorderColumns: (projectId: string): string => `/projects/${projectId}/board/columns/order`\n};\n", "export const AGENTIC_SDLC_PROTECTED_COLUMN_SLUGS = [\n \"backlog\",\n \"in-awaiting\",\n \"in-analysis\",\n \"in-development\",\n \"in-qa\",\n \"done\",\n \"released\"\n] as const;\n\nexport type AgenticSdlcProtectedColumnSlug = (typeof AGENTIC_SDLC_PROTECTED_COLUMN_SLUGS)[number];\n\nconst AGENTIC_SDLC_PROTECTED_COLUMN_SLUG_SET = new Set<string>(AGENTIC_SDLC_PROTECTED_COLUMN_SLUGS);\n\nexport const SPRINT_BACKLOG_COLUMN_SLUG = \"sprint-backlog\";\n\nexport const CUSTOM_COLUMN_SLUG_PREFIX = \"custom-\";\n\nexport const MAX_BOARD_COLUMNS = 30;\n\nexport const CUSTOM_COLUMN_NAME_MAX_LENGTH = 128;\n\nexport function isCustomColumnSlug(slug: string): boolean {\n return slug.startsWith(CUSTOM_COLUMN_SLUG_PREFIX);\n}\n\nexport function isProtectedColumnSlug(slug: string): boolean {\n return AGENTIC_SDLC_PROTECTED_COLUMN_SLUG_SET.has(slug);\n}\n\nexport function isDeletableColumnSlug(slug: string): boolean {\n return isCustomColumnSlug(slug) && !isProtectedColumnSlug(slug);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=boards.types.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=wire-types.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=pagination.types.js.map", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateProjectRequest,\n DeleteProjectPreviewResponse,\n DeleteProjectRequest,\n ListProjectsQuery,\n ProjectListResponse,\n ProjectResponse,\n UpdateProjectRequest\n} from \"./projects.types\";\n\n/**\n * Projects REST API contract.\n */\nexport interface ProjectsApi {\n /** List projects; defaults to non-archived when status is omitted. */\n listProjects(query?: ListProjectsQuery): Promise<ProjectListResponse>;\n\n /** Create a project and its board from the selected preset. */\n createProject(body: CreateProjectRequest): Promise<ProjectResponse>;\n\n /** Get a project by id. */\n getProject(id: string): Promise<ProjectResponse>;\n\n /** Update project metadata. */\n updateProject(id: string, body: UpdateProjectRequest): Promise<ProjectResponse>;\n\n /** Archive a project. Human-only; owner access required. Idempotent when already archived. */\n archiveProject(id: string): Promise<ProjectResponse>;\n\n /** Unarchive a project. Human-only; owner access required. Idempotent when already active. */\n unarchiveProject(id: string): Promise<ProjectResponse>;\n\n /** Preview hard-delete impact and eligibility. Human-only; owner access required. */\n getDeletePreview(id: string): Promise<DeleteProjectPreviewResponse>;\n\n /** Permanently delete an archived project. Human-only; owner access required. */\n deleteProject(id: string, body: DeleteProjectRequest): Promise<void>;\n}\n\nexport const PROJECTS_PREFIX = \"/projects\";\n\nexport const PROJECTS_ROUTES: APIRoutes<ProjectsApi> = {\n listProjects: (): string => PROJECTS_PREFIX,\n createProject: (): string => PROJECTS_PREFIX,\n getProject: (id: string): string => `${PROJECTS_PREFIX}/${id}`,\n updateProject: (id: string): string => `${PROJECTS_PREFIX}/${id}`,\n archiveProject: (id: string): string => `${PROJECTS_PREFIX}/${id}/archive`,\n unarchiveProject: (id: string): string => `${PROJECTS_PREFIX}/${id}/unarchive`,\n getDeletePreview: (id: string): string => `${PROJECTS_PREFIX}/${id}/delete-preview`,\n deleteProject: (id: string): string => `${PROJECTS_PREFIX}/${id}`\n};\n", "import type { BoardPresetCode } from \"../enums/board-preset-code.enum\";\nimport type { EstimationMode } from \"../enums/estimation-mode.enum\";\nimport type { SubagentRole } from \"../enums/subagent-role.enum\";\nimport type { TaskCardEstimationDisplay } from \"../enums/task-card-estimation-display.enum\";\nimport type { IsoDateTimeString } from \"../types/wire-types\";\n\n/** IDE subagent slug binding for a universal role; `enabled` defaults to true when omitted. */\nexport interface SubagentRoleBinding {\n slug: string;\n enabled: boolean;\n}\n\n/** Project-level map from universal subagent role to binding (slug + optional disable toggle). */\nexport type SubagentRoleBindings = Partial<Record<SubagentRole, SubagentRoleBinding>>;\n\n/** Subscription-gated features exposed on GET /projects/:id for UI gating. */\nexport interface ProjectCapabilities {\n workItemAttachmentsUploadEnabled: boolean;\n}\n\nexport interface ProjectResponse {\n id: string;\n name: string;\n key: string;\n description: string | null;\n presetCode: BoardPresetCode;\n /** Active estimation field for drawer validation (storyPoints | estimate). */\n estimationMode: EstimationMode;\n /** When true, active estimation field is required on EPIC/STORY create/update. */\n estimationRequired: boolean;\n /** Which estimation value to show on TaskCard (independent of estimationMode). */\n taskCardEstimationDisplay: TaskCardEstimationDisplay;\n /** IDE subagent slug + enabled flag per universal subagent role; empty object when unset. */\n subagentRoleBindings: SubagentRoleBindings;\n /** When true, AGENTIC_SDLC phase workflow and agent orchestration apply on this preset's physical columns. Always true for AGENTIC_SDLC preset. */\n agenticSdlcPhasesEnabled: boolean;\n /** When true, sprint planning, activation, and board sprint insights are available. */\n sprintsEnabled: boolean;\n archivedAt: IsoDateTimeString | null;\n /** True when project owner subscription overflow marks project read-only for all users. */\n subscriptionReadOnly?: boolean;\n /** Owner subscription capabilities for feature gating in project UI. */\n capabilities?: ProjectCapabilities;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface ProjectListResponse {\n items: ProjectResponse[];\n}\n\nexport interface CreateProjectRequest {\n name: string;\n key: string;\n description?: string | null;\n presetCode?: BoardPresetCode;\n}\n\nexport interface UpdateProjectRequest {\n name?: string;\n description?: string | null;\n estimationMode?: EstimationMode;\n estimationRequired?: boolean;\n taskCardEstimationDisplay?: TaskCardEstimationDisplay;\n /** Replace project subagent role bindings (slug + enabled per role). */\n subagentRoleBindings?: SubagentRoleBindings;\n /** Enable agentic SDLC phase orchestration on this preset's physical columns. Rejected when false on AGENTIC_SDLC preset. */\n agenticSdlcPhasesEnabled?: boolean;\n /** Enable sprint planning and activation for this project. */\n sprintsEnabled?: boolean;\n}\n\nexport type ProjectListStatus = \"active\" | \"archived\" | \"all\";\n\nexport interface ListProjectsQuery {\n status?: ProjectListStatus;\n}\n\n/** Entity counts included in project hard-delete preview. */\nexport interface ProjectDeleteCounts {\n workItemCount: number;\n memberCount: number;\n attachmentCount: number;\n}\n\nexport const PROJECT_DELETE_BLOCK_REASON = {\n NOT_ARCHIVED: \"NOT_ARCHIVED\",\n ACTIVE_AGENT_RUN: \"ACTIVE_AGENT_RUN\",\n FORBIDDEN: \"FORBIDDEN\"\n} as const;\n\nexport type ProjectDeleteBlockReason = (typeof PROJECT_DELETE_BLOCK_REASON)[keyof typeof PROJECT_DELETE_BLOCK_REASON];\n\nexport interface DeleteProjectPreviewResponse {\n projectId: string;\n name: string;\n key: string;\n counts: ProjectDeleteCounts;\n /** False when project is not archived or an agent run is active. */\n canDelete: boolean;\n blockReason: ProjectDeleteBlockReason | null;\n}\n\nexport interface DeleteProjectRequest {\n /** Must match project.key (case-insensitive) to confirm permanent deletion. */\n confirmKey: string;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=project-binding.types.js.map", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateWorkItemRequest,\n DeleteWorkItemPreviewResponse,\n DeleteWorkItemRequest,\n ListWorkItemsQuery,\n MoveWorkItemRequest,\n UpdateWorkItemRequest,\n WorkItemListResponse,\n WorkItemResponse\n} from \"./work-items.types\";\n\n/**\n * Work items REST API contract.\n */\nexport interface WorkItemsApi {\n /** List work items for a project. */\n listWorkItems(projectId: string, query?: ListWorkItemsQuery): Promise<WorkItemListResponse>;\n\n /** Create a work item under a project. */\n createWorkItem(projectId: string, body: CreateWorkItemRequest): Promise<WorkItemResponse>;\n\n /** Get a work item by id. */\n getWorkItem(id: string): Promise<WorkItemResponse>;\n\n /** Update a work item. */\n updateWorkItem(id: string, body: UpdateWorkItemRequest): Promise<WorkItemResponse>;\n\n /** Move a work item to another board column (optimistic lock via version). */\n moveWorkItem(id: string, body: MoveWorkItemRequest): Promise<WorkItemResponse>;\n\n /** Preview cascade impact and delete eligibility. MCP: SUBTASK only; EPIC/STORY return canDelete false. */\n getDeletePreview(id: string): Promise<DeleteWorkItemPreviewResponse>;\n\n /** Hard-delete work item. MCP: SUBTASK only (confirmCascade false). Body required when cascade > 0. */\n deleteWorkItem(id: string, body: DeleteWorkItemRequest): Promise<void>;\n}\n\nexport const WORK_ITEMS_PREFIX = \"/work-items\";\n\nexport const WORK_ITEMS_ROUTES: APIRoutes<WorkItemsApi> = {\n listWorkItems: (projectId: string): string => `/projects/${projectId}/work-items`,\n createWorkItem: (projectId: string): string => `/projects/${projectId}/work-items`,\n getWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}`,\n updateWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}`,\n deleteWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}`,\n getDeletePreview: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}/delete-preview`,\n moveWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}/move`\n};\n", "export const WORK_ITEMS_SEARCH_MIN_QUERY_LENGTH = 2;\n\nexport const WORK_ITEMS_SEARCH_MAX_QUERY_LENGTH = 200;\n\nexport const WORK_ITEMS_SEARCH_AUTOCOMPLETE_LIMIT = 20;\n", "import type { SubagentRole } from \"../enums/subagent-role.enum\";\nimport type { Priority } from \"../enums/priority.enum\";\nimport type { WorkItemType } from \"../enums/work-item-type.enum\";\nimport type { WorkflowPhase } from \"../enums/workflow-phase.enum\";\nimport type { PaginatedResponse, PaginationQuery } from \"../types/pagination.types\";\nimport type { LabelSummary } from \"../labels/labels.types\";\nimport type { IsoDateTimeString } from \"../types/wire-types\";\n\n/** Counts of descendants that will be hard-deleted with the target item. */\nexport interface WorkItemDeleteCascadeCounts {\n /** Direct + nested STORY items (non-zero only when target is EPIC). */\n storyCount: number;\n /** Direct + nested SUBTASK items. */\n subtaskCount: number;\n /** storyCount + subtaskCount (excludes the target itself). */\n totalCount: number;\n}\n\nexport const WORK_ITEM_DELETE_BLOCK_REASON = {\n FORBIDDEN: \"FORBIDDEN\",\n ACTIVE_AGENT_RUN: \"ACTIVE_AGENT_RUN\",\n VIEWER: \"VIEWER\"\n} as const;\n\nexport type WorkItemDeleteBlockReason =\n (typeof WORK_ITEM_DELETE_BLOCK_REASON)[keyof typeof WORK_ITEM_DELETE_BLOCK_REASON];\n\nexport interface DeleteWorkItemPreviewResponse {\n workItemId: string;\n type: WorkItemType;\n title: string;\n cascade: WorkItemDeleteCascadeCounts;\n /** False when RBAC or active agent run blocks delete. */\n canDelete: boolean;\n /** Machine-readable block reason when canDelete is false. */\n blockReason: WorkItemDeleteBlockReason | null;\n}\n\nexport interface DeleteWorkItemRequest {\n /**\n * Required true when cascade.totalCount > 0 (from preview).\n * Ignored when deleting a leaf (SUBTASK or childless STORY/EPIC).\n */\n confirmCascade: boolean;\n}\n\nexport interface WorkItemResponse {\n id: string;\n /** Monotonic per-project sequence (1-based). */\n number: number;\n /** Human-readable key, e.g. \"TB-42\". */\n displayKey: string;\n projectId: string;\n parentId: string | null;\n type: WorkItemType;\n title: string;\n description: string | null;\n acceptanceCriteria: string | null;\n priority: Priority | null;\n columnId: string | null;\n columnName: string | null;\n /** Column the work item was in before moving to In Awaiting; null when not blocked. */\n blockedFromColumnId: string | null;\n blockedFromColumnName: string | null;\n /** Agent role active when blocked; used to resume workflow phase in in-analysis. */\n blockedFromAgentRole: SubagentRole | null;\n /**\n * Workflow phase within agent columns (PRODUCT | ANALYST | ARCHITECT | DESIGNER | DEVELOPMENT).\n * Null when phase does not apply.\n */\n workflowPhase: WorkflowPhase | null;\n /** Whether DESIGNER phase is required before development (set by architect). */\n designerRequired: boolean;\n /** Dev roles still awaiting completion during DEVELOPMENT phase (parallel runs). */\n pendingDevRoles: SubagentRole[];\n assignedAgentRole: SubagentRole | null;\n version: number;\n boardPosition: number | null;\n /** ISO-8601 instant; set on first transition to Released (git or manual). */\n releasedAt: IsoDateTimeString | null;\n /** Full git commit SHA (40 hex); set only by git release path. */\n releaseCommitSha: string | null;\n /** Human creator; null for MCP-created or legacy rows. */\n createdByUserId: string | null;\n /** Human assignee; null when unassigned or MCP-created without assignee. */\n assigneeUserId: string | null;\n /** Story points; EPIC/STORY only \u2014 always null for SUBTASK. */\n storyPoints: number | null;\n /** Estimate in hours (decimal string); EPIC/STORY only \u2014 always null for SUBTASK. */\n estimate: string | null;\n labels: LabelSummary[];\n /** True when the work item is in the active sprint scope; false otherwise. */\n inActiveSprintScope: boolean;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport type WorkItemListResponse = PaginatedResponse<WorkItemResponse>;\n\nexport interface CreateWorkItemRequest {\n type: WorkItemType;\n title: string;\n description?: string | null;\n acceptanceCriteria?: string | null;\n /**\n * Work item priority. Omitted or null on create defaults to LOW on the server.\n */\n priority?: Priority | null;\n parentId?: string | null;\n /** EPIC/STORY only; ignored with 422 for SUBTASK. */\n storyPoints?: number | null;\n /** Hours as decimal string; EPIC/STORY only; ignored with 422 for SUBTASK. */\n estimate?: string | null;\n /** Project member user id; defaults to creator on human create when omitted. */\n assigneeUserId?: string | null;\n /** Up to 10 project label ids to attach on create. */\n labelIds?: string[];\n}\n\nexport interface UpdateWorkItemRequest {\n title?: string;\n description?: string | null;\n acceptanceCriteria?: string | null;\n priority?: Priority | null;\n assignedAgentRole?: SubagentRole | null;\n parentId?: string | null;\n storyPoints?: number | null;\n estimate?: string | null;\n assigneeUserId?: string | null;\n /** Replace work item labels (up to 10). Omitted to leave labels unchanged. */\n labelIds?: string[];\n /** Optimistic-lock version of the card; the client sends the current known version. */\n version: number;\n}\n\nexport interface ListWorkItemsQuery extends PaginationQuery {\n type?: WorkItemType;\n parentId?: string | null;\n columnId?: string;\n /** Project-scoped full-text search (title, description, acceptance criteria, display key). */\n q?: string;\n}\n\nexport interface MoveWorkItemRequest {\n columnId: string;\n /**\n * Target 0-based ordinal index among STORY work items in `columnId`.\n * Omitted when moving to another column without a specific position (append at end).\n * Used for same-column reorder and precise cross-column placement.\n */\n boardPosition?: number;\n version: number;\n}\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { SyncGitReleasesRequest, SyncGitReleasesResponse } from \"./git-release.types\";\n\n/**\n * Git-driven Done to Released REST API contract.\n */\nexport interface GitReleaseApi {\n /** Idempotent bulk release by git push metadata (partial success allowed). */\n syncGitReleases(projectId: string, body: SyncGitReleasesRequest): Promise<SyncGitReleasesResponse>;\n}\n\nexport const GIT_RELEASE_ROUTES: APIRoutes<GitReleaseApi> = {\n syncGitReleases: (projectId: string): string => `/projects/${projectId}/git-releases/sync`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=git-release.types.js.map", "export * from \"./git-release.api\";\nexport * from \"./git-release.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { AttachmentListResponse, AttachmentResponse } from \"./attachments.types\";\n\n/**\n * Work item attachments REST API contract.\n */\nexport interface AttachmentsApi {\n /** List attachments for a work item. */\n listAttachments(workItemId: string): Promise<AttachmentListResponse>;\n\n /** Upload an attachment to a work item (multipart field \"file\"). */\n uploadAttachment(workItemId: string, file: File): Promise<AttachmentResponse>;\n\n /** Download attachment binary by id. */\n downloadAttachment(workItemId: string, attachmentId: string): Promise<Blob>;\n\n /** Delete an attachment by id. */\n deleteAttachment(workItemId: string, attachmentId: string): Promise<void>;\n}\n\nexport const ATTACHMENTS_ROUTES: APIRoutes<AttachmentsApi> = {\n listAttachments: (workItemId: string): string => `/work-items/${workItemId}/attachments`,\n uploadAttachment: (workItemId: string): string => `/work-items/${workItemId}/attachments`,\n downloadAttachment: (workItemId: string, attachmentId: string): string =>\n `/work-items/${workItemId}/attachments/${attachmentId}/download`,\n deleteAttachment: (workItemId: string, attachmentId: string): string =>\n `/work-items/${workItemId}/attachments/${attachmentId}`\n};\n", "export type { AttachmentsApi } from \"./attachments.api\";\nexport { ATTACHMENTS_ROUTES } from \"./attachments.api\";\nexport type { AttachmentListResponse, AttachmentResponse, AttachmentUploaderResponse } from \"./attachments.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { CommentListResponse, CommentResponse, CreateCommentRequest } from \"./comments.types\";\n\n/**\n * Work item comments REST API contract.\n */\nexport interface CommentsApi {\n /** List comments for a work item (newest last). */\n listComments(workItemId: string): Promise<CommentListResponse>;\n\n /** Create a comment on a work item. */\n createComment(workItemId: string, body: CreateCommentRequest): Promise<CommentResponse>;\n\n /** Delete a comment by id. */\n deleteComment(workItemId: string, commentId: string): Promise<void>;\n}\n\nexport const COMMENTS_ROUTES: APIRoutes<CommentsApi> = {\n listComments: (workItemId: string): string => `/work-items/${workItemId}/comments`,\n createComment: (workItemId: string): string => `/work-items/${workItemId}/comments`,\n deleteComment: (workItemId: string, commentId: string): string => `/work-items/${workItemId}/comments/${commentId}`\n};\n", "import type { IsoDateTimeString } from \"../types/wire-types\";\n\nexport const COMMENT_AUTHOR_TYPE = {\n HUMAN: \"HUMAN\",\n MCP: \"MCP\"\n} as const;\n\nexport type CommentAuthorType = (typeof COMMENT_AUTHOR_TYPE)[keyof typeof COMMENT_AUTHOR_TYPE];\n\nexport interface CommentAuthorResponse {\n type: CommentAuthorType;\n userId: string | null;\n displayName: string | null;\n apiTokenId: string | null;\n}\n\nexport interface CommentResponse {\n id: string;\n workItemId: string;\n body: string;\n author: CommentAuthorResponse;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface CommentListResponse {\n items: CommentResponse[];\n}\n\nexport interface CreateCommentRequest {\n body: string;\n}\n", "export type { CommentsApi } from \"./comments.api\";\nexport { COMMENTS_ROUTES } from \"./comments.api\";\nexport type {\n CommentAuthorResponse,\n CommentAuthorType,\n CommentListResponse,\n CommentResponse,\n CreateCommentRequest\n} from \"./comments.types\";\nexport { COMMENT_AUTHOR_TYPE } from \"./comments.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n FeedbackListResponse,\n FeedbackMarkReadResponse,\n FeedbackResponse,\n FeedbackUnreadSummaryResponse,\n ListFeedbackQuery,\n SubmitFeedbackRequest\n} from \"./feedback.types\";\n\n/**\n * User feedback REST API (separate from work-item comments).\n */\nexport interface FeedbackApi {\n /** Submit product feedback (human session only). */\n submitFeedback(body: SubmitFeedbackRequest): Promise<FeedbackResponse>;\n\n /** List feedback entries for system admins or staff with FEEDBACK_READ capability. */\n listFeedback(query?: ListFeedbackQuery): Promise<FeedbackListResponse>;\n\n /** Whether the current user has unread feedback in their tenant. */\n getUnreadSummary(): Promise<FeedbackUnreadSummaryResponse>;\n\n /** Mark all current feedback as read for the current user. */\n markFeedbackRead(): Promise<FeedbackMarkReadResponse>;\n\n /** Get a single feedback entry by id (system admins or staff with FEEDBACK_READ capability). */\n getFeedback(id: string): Promise<FeedbackResponse>;\n}\n\nexport const FEEDBACK_PREFIX = \"/feedback\";\n\nexport const FEEDBACK_ADMIN_PREFIX = \"/admin/feedback\";\n\nexport const FEEDBACK_ROUTES: APIRoutes<FeedbackApi> = {\n submitFeedback: (): string => FEEDBACK_PREFIX,\n listFeedback: (): string => FEEDBACK_ADMIN_PREFIX,\n getUnreadSummary: (): string => `${FEEDBACK_ADMIN_PREFIX}/unread-summary`,\n markFeedbackRead: (): string => `${FEEDBACK_ADMIN_PREFIX}/mark-read`,\n getFeedback: (id: string): string => `${FEEDBACK_ADMIN_PREFIX}/${id}`\n};\n", "export const FEEDBACK_TYPE = {\n BUG: \"BUG\",\n IMPROVEMENT: \"IMPROVEMENT\",\n QUESTION: \"QUESTION\",\n OTHER: \"OTHER\"\n} as const;\n\nexport type FeedbackType = (typeof FEEDBACK_TYPE)[keyof typeof FEEDBACK_TYPE];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=feedback.types.js.map", "export * from \"./feedback.api\";\nexport * from \"./feedback.enum\";\nexport * from \"./feedback.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n ListNotificationsQuery,\n NotificationListResponse,\n NotificationMarkAllReadResponse,\n NotificationMarkReadResponse,\n NotificationUnreadCountResponse\n} from \"./notifications.types\";\n\n/**\n * In-app notification inbox REST API (human session only).\n */\nexport interface NotificationsApi {\n /** List notifications for the current user (keyset-paginated). */\n listNotifications(query?: ListNotificationsQuery): Promise<NotificationListResponse>;\n\n /** Count unread notifications for the current user. */\n getUnreadCount(query?: Pick<ListNotificationsQuery, \"projectId\">): Promise<NotificationUnreadCountResponse>;\n\n /** Mark a single notification as read. */\n markNotificationRead(id: string): Promise<NotificationMarkReadResponse>;\n\n /** Mark all unread notifications as read for the current user. */\n markAllNotificationsRead(query?: Pick<ListNotificationsQuery, \"projectId\">): Promise<NotificationMarkAllReadResponse>;\n}\n\nexport const NOTIFICATIONS_PREFIX = \"/notifications\";\n\nexport const NOTIFICATIONS_ROUTES: APIRoutes<NotificationsApi> = {\n listNotifications: (): string => NOTIFICATIONS_PREFIX,\n getUnreadCount: (): string => `${NOTIFICATIONS_PREFIX}/unread-count`,\n markNotificationRead: (id: string): string => `${NOTIFICATIONS_PREFIX}/${id}/mark-read`,\n markAllNotificationsRead: (): string => `${NOTIFICATIONS_PREFIX}/mark-all-read`\n};\n", "export const NOTIFICATION_TYPE = {\n AGENT_IDE_ATTENTION: \"AGENT_IDE_ATTENTION\",\n AGENT_NEEDS_CLARIFICATION: \"AGENT_NEEDS_CLARIFICATION\",\n AGENT_RUN_FAILED: \"AGENT_RUN_FAILED\",\n AGENT_QA_HAS_BUGS: \"AGENT_QA_HAS_BUGS\"\n} as const;\n\nexport type NotificationType = (typeof NOTIFICATION_TYPE)[keyof typeof NOTIFICATION_TYPE];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=notifications.types.js.map", "export * from \"./notifications.api\";\nexport * from \"./notifications.enum\";\nexport * from \"./notifications.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n AcknowledgeAgentRunRequest,\n AgentRunListResponse,\n AgentRunPageResponse,\n AgentRunResponse,\n ClaimAgentRunsRequest,\n ClaimAgentRunsResponse,\n CompleteAgentRunRequest,\n CompleteAgentRunResponse,\n ListAgentRunsQuery,\n SetAgentRunAttentionRequest\n} from \"./agent-runs.types\";\n\n/**\n * Agent run outbox REST API contract.\n */\nexport interface AgentRunsApi {\n /** List agent runs (e.g. MCP polling by status). Keyset-paginated. */\n listAgentRuns(query?: ListAgentRunsQuery): Promise<AgentRunPageResponse>;\n\n /** Atomically claim pending agent runs for orchestrator delivery (PENDING \u2192 DISPATCHED). */\n claimAgentRuns(body: ClaimAgentRunsRequest): Promise<ClaimAgentRunsResponse>;\n\n /** List agent runs for a work item. */\n listAgentRunsByWorkItem(workItemId: string): Promise<AgentRunListResponse>;\n\n /**\n * Retry a failed agent run: inserts a new PENDING attempt with fresh payload from the current work item.\n * The source run stays FAILED. Requires write access; blocked when an inflight run exists for the same role.\n */\n retryAgentRun(id: string): Promise<AgentRunResponse>;\n\n /** Acknowledge agent run delivery (MCP). */\n acknowledgeAgentRun(id: string, body?: AcknowledgeAgentRunRequest): Promise<AgentRunResponse>;\n\n /** Report or clear human-attention flag while a run is ACKNOWLEDGED (in-flight subagent). */\n setAgentRunAttention(id: string, body: SetAgentRunAttentionRequest): Promise<AgentRunResponse>;\n\n /**\n * Complete agent run work: apply optional work item patch, resolve workflow transition,\n * move work item to the next column, and mark the run COMPLETED (or FAILED).\n */\n completeAgentRun(id: string, body?: CompleteAgentRunRequest): Promise<CompleteAgentRunResponse>;\n}\n\nexport const AGENT_RUNS_PREFIX = \"/agent-runs\";\n\nexport const AGENT_RUNS_ROUTES: APIRoutes<AgentRunsApi> = {\n listAgentRuns: (): string => AGENT_RUNS_PREFIX,\n claimAgentRuns: (): string => `${AGENT_RUNS_PREFIX}/claim`,\n listAgentRunsByWorkItem: (workItemId: string): string => `/work-items/${workItemId}/agent-runs`,\n retryAgentRun: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/retry`,\n acknowledgeAgentRun: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/acknowledge`,\n setAgentRunAttention: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/attention`,\n completeAgentRun: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/complete`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=agent-runs.types.js.map", "export * from \"./api-prefix\";\nexport * from \"./api-routes\";\nexport * from \"./enums/work-item-type.enum\";\nexport * from \"./enums/agent-role.enum\";\nexport * from \"./enums/subagent-role.enum\";\nexport * from \"./enums/agent-run-outcome.enum\";\nexport * from \"./enums/workflow-phase.enum\";\nexport * from \"./enums/agent-run-status.enum\";\nexport * from \"./enums/board-preset-code.enum\";\nexport * from \"./enums/changed-by-type.enum\";\nexport * from \"./enums/estimation-mode.enum\";\nexport * from \"./enums/task-card-estimation-display.enum\";\nexport * from \"./enums/priority.enum\";\nexport * from \"./enums/label-color.enum\";\nexport * from \"./enums/sprint-status.enum\";\nexport * from \"./enums/sprint-scope-mutation.enum\";\nexport * from \"./labels\";\nexport * from \"./sprints\";\nexport * from \"./project-subagents\";\nexport * from \"./project-webhooks\";\nexport * from \"./boards/boards.api\";\nexport * from \"./boards/boards.consts\";\nexport * from \"./boards/boards.types\";\nexport * from \"./types/wire-types\";\nexport * from \"./types/pagination.types\";\nexport * from \"./projects/projects.api\";\nexport * from \"./projects/projects.types\";\nexport * from \"./projects/project-binding.types\";\nexport * from \"./work-items/work-items.api\";\nexport * from \"./work-items/work-items.consts\";\nexport * from \"./work-items/work-items.types\";\nexport * from \"./git-release\";\nexport * from \"./attachments\";\nexport * from \"./comments\";\nexport * from \"./feedback\";\nexport * from \"./notifications\";\nexport * from \"./agent-runs/agent-runs.api\";\nexport * from \"./agent-runs/agent-runs.types\";\n", "import { BOARD_PRESET_CODE, type BoardPresetCode } from \"@task-boards/api\";\n\nexport interface InitBoardPresetColumnDefinition {\n slug: string;\n name: string;\n position: number;\n triggersAgent: boolean;\n agentRole?: string;\n cursorSubagentType?: string;\n}\n\nexport interface InitBoardPresetDefinition {\n code: BoardPresetCode;\n name: string;\n columnDefinitions: InitBoardPresetColumnDefinition[];\n}\n\n/** Final greenfield column layouts after the 52-migration chain (7-col AGENTIC_SDLC). */\nexport const INIT_BOARD_PRESET_DEFINITIONS: readonly InitBoardPresetDefinition[] = [\n {\n code: BOARD_PRESET_CODE.AGENTIC_SDLC,\n name: \"Agentic SDLC\",\n columnDefinitions: [\n { slug: \"backlog\", name: \"Backlog\", position: 0, triggersAgent: false },\n { slug: \"in-awaiting\", name: \"In Awaiting\", position: 1, triggersAgent: false },\n {\n slug: \"in-analysis\",\n name: \"In Analysis\",\n position: 2,\n triggersAgent: true,\n agentRole: \"FUNCTIONAL_ANALYST\",\n cursorSubagentType: \"functional-analyst\"\n },\n {\n slug: \"in-development\",\n name: \"In Development\",\n position: 3,\n triggersAgent: true,\n agentRole: \"FULLSTACK_DEV\",\n cursorSubagentType: \"senior-web-developer\"\n },\n {\n slug: \"in-qa\",\n name: \"In QA\",\n position: 4,\n triggersAgent: true,\n agentRole: \"QA_ENGINEER\",\n cursorSubagentType: \"senior-qa-engineer\"\n },\n { slug: \"done\", name: \"Done\", position: 5, triggersAgent: false },\n { slug: \"released\", name: \"Released\", position: 6, triggersAgent: false }\n ]\n },\n {\n code: BOARD_PRESET_CODE.KANBAN,\n name: \"Kanban\",\n columnDefinitions: [\n { slug: \"backlog\", name: \"Backlog\", position: 0, triggersAgent: false },\n { slug: \"in-progress\", name: \"In Progress\", position: 1, triggersAgent: false },\n { slug: \"done\", name: \"Done\", position: 2, triggersAgent: false }\n ]\n },\n {\n code: BOARD_PRESET_CODE.SCRUM,\n name: \"Scrum\",\n columnDefinitions: [\n { slug: \"backlog\", name: \"Backlog\", position: 0, triggersAgent: false },\n { slug: \"sprint-backlog\", name: \"Sprint Backlog\", position: 1, triggersAgent: false },\n { slug: \"in-progress\", name: \"In Progress\", position: 2, triggersAgent: false },\n { slug: \"in-review\", name: \"In Review\", position: 3, triggersAgent: false },\n { slug: \"done\", name: \"Done\", position: 4, triggersAgent: false }\n ]\n }\n] as const;\n", "export * from \"./init-board-preset-definitions\";\n", "export enum SubscriptionTier {\n FREE = \"FREE\",\n PRO = \"PRO\",\n ULTIMATE = \"ULTIMATE\"\n}\n", "import { SubscriptionTier } from \"../internal/subscriptions/subscription-tier.enum\";\n\nexport interface InitPricingPlanRow {\n tier: SubscriptionTier;\n displayName: string;\n ownedActiveProjectLimit: number;\n projectMemberLimit: number | null;\n llmSubagentEnabled: boolean;\n workItemAttachmentsEnabled: boolean;\n outboundWebhooksEnabled: boolean;\n monthlyPrice: string | null;\n currency: string;\n sortOrder: number;\n isPublic: boolean;\n isEnabled: boolean;\n discount3MonthsPercent: number | null;\n discount6MonthsPercent: number | null;\n discount9MonthsPercent: number | null;\n discount12MonthsPercent: number | null;\n}\n\n/** Final greenfield pricing_plan rows after the 52-migration chain. */\nexport const INIT_PRICING_PLAN_ROWS: readonly InitPricingPlanRow[] = [\n {\n tier: SubscriptionTier.FREE,\n displayName: \"Free\",\n ownedActiveProjectLimit: 3,\n projectMemberLimit: 3,\n llmSubagentEnabled: false,\n workItemAttachmentsEnabled: false,\n outboundWebhooksEnabled: false,\n monthlyPrice: \"0\",\n currency: \"USD\",\n sortOrder: 0,\n isPublic: true,\n isEnabled: true,\n discount3MonthsPercent: null,\n discount6MonthsPercent: null,\n discount9MonthsPercent: null,\n discount12MonthsPercent: null\n },\n {\n tier: SubscriptionTier.PRO,\n displayName: \"Pro\",\n ownedActiveProjectLimit: 20,\n projectMemberLimit: 5,\n llmSubagentEnabled: true,\n workItemAttachmentsEnabled: true,\n outboundWebhooksEnabled: true,\n monthlyPrice: null,\n currency: \"USD\",\n sortOrder: 1,\n isPublic: true,\n isEnabled: true,\n discount3MonthsPercent: null,\n discount6MonthsPercent: null,\n discount9MonthsPercent: null,\n discount12MonthsPercent: null\n },\n {\n tier: SubscriptionTier.ULTIMATE,\n displayName: \"Ultimate\",\n ownedActiveProjectLimit: 100,\n projectMemberLimit: null,\n llmSubagentEnabled: true,\n workItemAttachmentsEnabled: true,\n outboundWebhooksEnabled: true,\n monthlyPrice: null,\n currency: \"USD\",\n sortOrder: 2,\n isPublic: true,\n isEnabled: true,\n discount3MonthsPercent: null,\n discount6MonthsPercent: null,\n discount9MonthsPercent: null,\n discount12MonthsPercent: null\n }\n] as const;\n", "export * from \"./init-pricing-plan-seeds\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { PricingPlanResponse } from \"../subscriptions/subscriptions.types\";\n\nimport type {\n AuthMessageResponse,\n ConfirmEmailQuery,\n ForgotPasswordRequest,\n LoginRequest,\n PasswordPolicyResponse,\n RegisterCaptchaConfigResponse,\n RegisterRequest,\n ResendConfirmationRequest,\n ResetPasswordRequest,\n UserInfo\n} from \"./auth.types\";\n\n/**\n * Human session auth (Google OAuth2 + email/password + JWT cookie).\n */\nexport interface AuthApi {\n /** Redirect to Google OAuth consent screen. */\n googleLogin(): Promise<void>;\n\n /** OAuth callback \u2014 issues session cookie and redirects to frontend. */\n googleCallback(): Promise<void>;\n\n /** Public pricing plans for registration and marketing surfaces. */\n listPublicPricingPlans(): Promise<PricingPlanResponse[]>;\n\n /** Public Turnstile site key for the registration form (when enabled). */\n getRegisterCaptchaConfig(): Promise<RegisterCaptchaConfigResponse>;\n\n /** Public password complexity rules for registration and password forms. */\n getPasswordPolicy(): Promise<PasswordPolicyResponse>;\n\n /** Register with email and password; sends confirmation email. */\n register(body: RegisterRequest): Promise<AuthMessageResponse>;\n\n /** Email/password login \u2014 issues session cookie. */\n login(body: LoginRequest): Promise<UserInfo>;\n\n /** Confirm email address using token query parameter. */\n confirmEmail(query: ConfirmEmailQuery): Promise<AuthMessageResponse>;\n\n /** Resend email confirmation link. */\n resendConfirmation(body: ResendConfirmationRequest): Promise<AuthMessageResponse>;\n\n /** Request a password reset link (anti-enumeration). */\n forgotPassword(body: ForgotPasswordRequest): Promise<AuthMessageResponse>;\n\n /** Set a new password using a reset token. */\n resetPassword(body: ResetPasswordRequest): Promise<AuthMessageResponse>;\n\n /** Current authenticated user from session cookie. */\n getMe(): Promise<UserInfo>;\n\n /** Clear session cookie. */\n logout(): Promise<void>;\n}\n\nexport const AUTH_PREFIX = \"/auth\";\n\nexport const AUTH_ROUTES: APIRoutes<AuthApi> = {\n googleLogin: (): string => `${AUTH_PREFIX}/google`,\n googleCallback: (): string => `${AUTH_PREFIX}/google/callback`,\n listPublicPricingPlans: (): string => `${AUTH_PREFIX}/pricing-plans`,\n getRegisterCaptchaConfig: (): string => `${AUTH_PREFIX}/register/captcha-config`,\n getPasswordPolicy: (): string => `${AUTH_PREFIX}/password-policy`,\n register: (): string => `${AUTH_PREFIX}/register`,\n login: (): string => `${AUTH_PREFIX}/login`,\n confirmEmail: (): string => `${AUTH_PREFIX}/confirm-email`,\n resendConfirmation: (): string => `${AUTH_PREFIX}/resend-confirmation`,\n forgotPassword: (): string => `${AUTH_PREFIX}/forgot-password`,\n resetPassword: (): string => `${AUTH_PREFIX}/reset-password`,\n getMe: (): string => `${AUTH_PREFIX}/me`,\n logout: (): string => `${AUTH_PREFIX}/logout`\n};\n", "import type { StaffRole } from \"./staff-role.enum\";\nimport type { UserKind } from \"./user-kind.enum\";\n\nexport enum SystemRole {\n ADMIN = \"ADMIN\",\n MEMBER = \"MEMBER\"\n}\n\nexport enum ProjectMemberRole {\n OWNER = \"OWNER\",\n MEMBER = \"MEMBER\",\n VIEWER = \"VIEWER\"\n}\n\nexport interface UserInfo {\n id: string;\n email: string | null;\n displayName: string | null;\n firstName: string | null;\n lastName: string | null;\n avatarUrl: string | null;\n systemRole: SystemRole;\n userKind: UserKind;\n staffRoles: StaffRole[];\n emailVerified: boolean;\n hasPassword: boolean;\n tierSelectionCompleted: boolean;\n}\n\nexport interface RegisterRequest {\n email: string;\n password: string;\n firstName: string;\n lastName: string;\n /** Cloudflare Turnstile response token; required when register captcha is enabled. */\n turnstileToken?: string;\n}\n\nexport interface RegisterCaptchaConfigResponse {\n enabled: boolean;\n siteKey: string | null;\n}\n\nexport interface PasswordPolicyResponse {\n minLength: number;\n requireLowercase: boolean;\n requireUppercase: boolean;\n requireDigit: boolean;\n requireSpecialChar: boolean;\n}\n\nexport interface LoginRequest {\n email: string;\n password: string;\n}\n\nexport interface ResendConfirmationRequest {\n email: string;\n}\n\nexport interface ForgotPasswordRequest {\n email: string;\n}\n\nexport interface ResetPasswordRequest {\n token: string;\n newPassword: string;\n}\n\nexport interface ConfirmEmailQuery {\n token: string;\n}\n\nexport interface AuthMessageResponse {\n message: string;\n}\n\nexport interface UpdateProfileRequest {\n firstName: string;\n lastName: string;\n}\n\nexport interface ChangePasswordRequest {\n currentPassword: string;\n newPassword: string;\n}\n", "export enum StaffCapability {\n SYSTEM_OVERVIEW = \"SYSTEM_OVERVIEW\",\n FEEDBACK_READ = \"FEEDBACK_READ\"\n}\n", "export enum StaffRole {\n SUPPORT = \"SUPPORT\"\n}\n", "import { StaffCapability } from \"./staff-capability.enum\";\nimport { StaffRole } from \"./staff-role.enum\";\n\nexport const STAFF_ROLE_CAPABILITIES: Record<StaffRole, readonly StaffCapability[]> = {\n [StaffRole.SUPPORT]: [StaffCapability.SYSTEM_OVERVIEW, StaffCapability.FEEDBACK_READ]\n};\n", "export enum UserKind {\n HUMAN = \"HUMAN\",\n SERVICE = \"SERVICE\"\n}\n", "/** Fixed id of the default-tenant universal automation user (ADR-012). */\nexport const DEFAULT_SERVICE_USER_ID = \"f47ac10b-58cc-4372-a567-0e02b2c3d479\";\n\nexport const SERVICE_USER_DISPLAY_NAME = \"\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\";\n", "export type PasswordPolicyRule = \"minLength\" | \"lowercase\" | \"uppercase\" | \"digit\" | \"specialChar\";\n\nexport interface PasswordPolicy {\n minLength: number;\n requireLowercase: boolean;\n requireUppercase: boolean;\n requireDigit: boolean;\n requireSpecialChar: boolean;\n}\n\nexport const DEFAULT_PASSWORD_COMPLEXITY = {\n requireLowercase: true,\n requireUppercase: true,\n requireDigit: true,\n requireSpecialChar: true\n} as const;\n\nexport interface BuildPasswordPolicyOptions {\n minLength: number;\n requireLowercase?: boolean;\n requireUppercase?: boolean;\n requireDigit?: boolean;\n requireSpecialChar?: boolean;\n}\n\nexport function buildPasswordPolicy(minLengthOrOptions: number | BuildPasswordPolicyOptions): PasswordPolicy {\n const options: BuildPasswordPolicyOptions =\n typeof minLengthOrOptions === \"number\" ? { minLength: minLengthOrOptions } : minLengthOrOptions;\n\n return {\n minLength: options.minLength,\n requireLowercase: options.requireLowercase ?? DEFAULT_PASSWORD_COMPLEXITY.requireLowercase,\n requireUppercase: options.requireUppercase ?? DEFAULT_PASSWORD_COMPLEXITY.requireUppercase,\n requireDigit: options.requireDigit ?? DEFAULT_PASSWORD_COMPLEXITY.requireDigit,\n requireSpecialChar: options.requireSpecialChar ?? DEFAULT_PASSWORD_COMPLEXITY.requireSpecialChar\n };\n}\n\nexport function getFailedPasswordRules(password: string, policy: PasswordPolicy): PasswordPolicyRule[] {\n const failed: PasswordPolicyRule[] = [];\n\n if (password.length < policy.minLength) {\n failed.push(\"minLength\");\n }\n\n if (policy.requireLowercase && !/[a-z]/.test(password)) {\n failed.push(\"lowercase\");\n }\n\n if (policy.requireUppercase && !/[A-Z]/.test(password)) {\n failed.push(\"uppercase\");\n }\n\n if (policy.requireDigit && !/\\d/.test(password)) {\n failed.push(\"digit\");\n }\n\n if (policy.requireSpecialChar && !/[^A-Za-z0-9]/.test(password)) {\n failed.push(\"specialChar\");\n }\n\n return failed;\n}\n\nexport function isPasswordValid(password: string, policy: PasswordPolicy): boolean {\n return getFailedPasswordRules(password, policy).length === 0;\n}\n", "export type { AuthApi } from \"./auth.api\";\nexport { AUTH_PREFIX, AUTH_ROUTES } from \"./auth.api\";\nexport type {\n AuthMessageResponse,\n ConfirmEmailQuery,\n ChangePasswordRequest,\n ForgotPasswordRequest,\n LoginRequest,\n PasswordPolicyResponse,\n RegisterCaptchaConfigResponse,\n RegisterRequest,\n ResendConfirmationRequest,\n ResetPasswordRequest,\n UpdateProfileRequest,\n UserInfo\n} from \"./auth.types\";\nexport { ProjectMemberRole, SystemRole } from \"./auth.types\";\nexport { StaffCapability } from \"./staff-capability.enum\";\nexport { StaffRole } from \"./staff-role.enum\";\nexport { STAFF_ROLE_CAPABILITIES } from \"./staff-role-capabilities.const\";\nexport { UserKind } from \"./user-kind.enum\";\nexport { DEFAULT_SERVICE_USER_ID, SERVICE_USER_DISPLAY_NAME } from \"./service-user.consts\";\nexport {\n buildPasswordPolicy,\n DEFAULT_PASSWORD_COMPLEXITY,\n getFailedPasswordRules,\n isPasswordValid\n} from \"./password-policy.util\";\nexport type { PasswordPolicy, PasswordPolicyRule } from \"./password-policy.util\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { ChangePasswordRequest, UpdateProfileRequest, UserInfo } from \"../auth/auth.types\";\n\nimport type {\n NotificationPreferencesResponse,\n UpdateNotificationPreferencesRequest\n} from \"./account-notification-preferences.types\";\n\n/**\n * Authenticated human account management.\n */\nexport interface AccountApi {\n /** Update profile (first/last name). */\n updateProfile(body: UpdateProfileRequest): Promise<UserInfo>;\n\n /** Change password (requires current password when one is set). */\n changePassword(body: ChangePasswordRequest): Promise<void>;\n\n /** Read email notification and locale preferences. */\n getNotificationPreferences(): Promise<NotificationPreferencesResponse>;\n\n /** Update email notification and/or locale preferences. */\n updateNotificationPreferences(body: UpdateNotificationPreferencesRequest): Promise<NotificationPreferencesResponse>;\n}\n\nexport const ACCOUNT_PREFIX = \"/account\";\n\nexport const ACCOUNT_ROUTES: APIRoutes<AccountApi> = {\n updateProfile: (): string => ACCOUNT_PREFIX,\n changePassword: (): string => `${ACCOUNT_PREFIX}/password`,\n getNotificationPreferences: (): string => `${ACCOUNT_PREFIX}/notification-preferences`,\n updateNotificationPreferences: (): string => `${ACCOUNT_PREFIX}/notification-preferences`\n};\n", "export type { AccountApi } from \"./account.api\";\nexport { ACCOUNT_PREFIX, ACCOUNT_ROUTES } from \"./account.api\";\nexport type {\n NotificationPreferencesResponse,\n UpdateNotificationPreferencesRequest,\n UserLocale\n} from \"./account-notification-preferences.types\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n ApiTokenListResponse,\n CreateApiTokenRequest,\n CreateApiTokenResponse,\n ListApiTokensQuery\n} from \"./api-tokens.types\";\n\n/**\n * MCP API token management.\n * Authenticated humans create, list, and revoke their own tokens.\n * System admins (ADMIN role) can list all tokens for audit.\n * Bearer (API token) authentication cannot call these endpoints.\n */\nexport interface ApiTokensApi {\n /** Create token; plaintext returned once. */\n createToken(body: CreateApiTokenRequest): Promise<CreateApiTokenResponse>;\n\n /** List tokens with masked preview. Keyset-paginated. */\n listTokens(query?: ListApiTokensQuery): Promise<ApiTokenListResponse>;\n\n /** Revoke token by id. */\n revokeToken(id: string): Promise<void>;\n}\n\nexport const API_TOKENS_PREFIX = \"/api-tokens\";\n\nexport const API_TOKENS_ROUTES: APIRoutes<ApiTokensApi> = {\n createToken: (): string => API_TOKENS_PREFIX,\n listTokens: (): string => API_TOKENS_PREFIX,\n revokeToken: (id: string): string => `${API_TOKENS_PREFIX}/${id}`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=api-tokens.types.js.map", "export const API_TOKEN_SCOPE = {\n READ: \"read\",\n WRITE: \"write\"\n} as const;\n\nexport type ApiTokenScope = (typeof API_TOKEN_SCOPE)[keyof typeof API_TOKEN_SCOPE];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n InviteProjectMemberRequest,\n InviteProjectMemberResponse,\n ProjectInvitationListResponse,\n ProjectMemberListResponse,\n ProjectMemberResponse,\n UpdateProjectMemberRequest\n} from \"./members.types\";\n\n/**\n * Project membership management.\n */\nexport interface MembersApi {\n /** List project members. */\n listMembers(projectId: string): Promise<ProjectMemberListResponse>;\n\n /** Hybrid invite: existing user \u2192 member; else pending invitation. OWNER only. */\n inviteMember(projectId: string, body: InviteProjectMemberRequest): Promise<InviteProjectMemberResponse>;\n\n updateMemberRole(\n projectId: string,\n memberId: string,\n body: UpdateProjectMemberRequest\n ): Promise<ProjectMemberResponse>;\n\n removeMember(projectId: string, memberId: string): Promise<void>;\n\n listInvitations(projectId: string): Promise<ProjectInvitationListResponse>;\n\n revokeInvitation(projectId: string, invitationId: string): Promise<void>;\n}\n\nexport const MEMBERS_ROUTES: APIRoutes<MembersApi> = {\n listMembers: (projectId: string): string => `/projects/${projectId}/members`,\n inviteMember: (projectId: string): string => `/projects/${projectId}/members`,\n updateMemberRole: (projectId: string, memberId: string): string => `/projects/${projectId}/members/${memberId}`,\n removeMember: (projectId: string, memberId: string): string => `/projects/${projectId}/members/${memberId}`,\n listInvitations: (projectId: string): string => `/projects/${projectId}/invitations`,\n revokeInvitation: (projectId: string, invitationId: string): string =>\n `/projects/${projectId}/invitations/${invitationId}`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=members.types.js.map", "export const INVITATION_STATUS = {\n PENDING: \"PENDING\",\n ACCEPTED: \"ACCEPTED\",\n REVOKED: \"REVOKED\",\n EXPIRED: \"EXPIRED\"\n} as const;\n\nexport type InvitationStatus = (typeof INVITATION_STATUS)[keyof typeof INVITATION_STATUS];\n\nexport const INVITE_OUTCOME = {\n MEMBER_ADDED: \"MEMBER_ADDED\",\n INVITATION_SENT: \"INVITATION_SENT\"\n} as const;\n\nexport type InviteOutcome = (typeof INVITE_OUTCOME)[keyof typeof INVITE_OUTCOME];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n ImportExecuteRequest,\n ImportExecuteResponse,\n ImportPreviewMetadata,\n ImportPreviewResponse\n} from \"./imports.types\";\n\n/**\n * CSV/XLSX task import REST API contract.\n */\nexport interface ImportsApi {\n /**\n * Multipart: field `file` (CSV/XLSX) + field `metadata` (JSON ImportPreviewMetadata).\n * No DB writes.\n */\n previewImport(file: File, metadata: ImportPreviewMetadata): Promise<ImportPreviewResponse>;\n\n /** Commit import in one DB transaction. */\n executeImport(body: ImportExecuteRequest): Promise<ImportExecuteResponse>;\n}\n\nexport const IMPORTS_PREFIX = \"/imports\";\n\nexport const IMPORTS_ROUTES: APIRoutes<ImportsApi> = {\n previewImport: (): string => `${IMPORTS_PREFIX}/preview`,\n executeImport: (): string => `${IMPORTS_PREFIX}/execute`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=imports.types.js.map", "export const IMPORT_FILE_FORMAT = {\n CSV: \"CSV\",\n XLSX: \"XLSX\"\n} as const;\n\nexport type ImportFileFormat = (typeof IMPORT_FILE_FORMAT)[keyof typeof IMPORT_FILE_FORMAT];\n\nexport const IMPORT_TARGET_MODE = {\n NEW_PROJECT: \"NEW_PROJECT\",\n EXISTING_PROJECT: \"EXISTING_PROJECT\"\n} as const;\n\nexport type ImportTargetMode = (typeof IMPORT_TARGET_MODE)[keyof typeof IMPORT_TARGET_MODE];\n", "export type { ImportsApi } from \"./imports.api\";\nexport { IMPORTS_PREFIX, IMPORTS_ROUTES } from \"./imports.api\";\nexport * from \"./imports.types\";\nexport * from \"./imports.enums\";\n", "export const EXCEPTION_CODE = {\n IMPORT_INVALID_FILE: \"IMPORT_INVALID_FILE\",\n IMPORT_PARSE_ERROR: \"IMPORT_PARSE_ERROR\",\n IMPORT_ROW_LIMIT_EXCEEDED: \"IMPORT_ROW_LIMIT_EXCEEDED\",\n IMPORT_FILE_TOO_LARGE: \"IMPORT_FILE_TOO_LARGE\",\n IMPORT_PREVIEW_NOT_FOUND: \"IMPORT_PREVIEW_NOT_FOUND\",\n IMPORT_PREVIEW_EXPIRED: \"IMPORT_PREVIEW_EXPIRED\",\n IMPORT_EXECUTE_FAILED: \"IMPORT_EXECUTE_FAILED\",\n INVITATION_ALREADY_PENDING: \"INVITATION_ALREADY_PENDING\",\n INVITATION_NOT_FOUND: \"INVITATION_NOT_FOUND\",\n INVITATION_EXPIRED: \"INVITATION_EXPIRED\",\n MEMBER_NOT_FOUND: \"MEMBER_NOT_FOUND\",\n CANNOT_REMOVE_LAST_OWNER: \"CANNOT_REMOVE_LAST_OWNER\",\n CANNOT_DEMOTE_LAST_OWNER: \"CANNOT_DEMOTE_LAST_OWNER\",\n CANNOT_MODIFY_SERVICE_USER: \"CANNOT_MODIFY_SERVICE_USER\",\n CANNOT_REMOVE_SERVICE_USER: \"CANNOT_REMOVE_SERVICE_USER\",\n AGENT_RUN_NOT_COMPLETABLE: \"AGENT_RUN_NOT_COMPLETABLE\",\n AGENT_RUN_INFLIGHT: \"AGENT_RUN_INFLIGHT\",\n AGENT_RUN_NOT_RETRYABLE: \"AGENT_RUN_NOT_RETRYABLE\",\n AGENT_RUN_STALE: \"AGENT_RUN_STALE\",\n WORKFLOW_TRANSITION_INVALID: \"WORKFLOW_TRANSITION_INVALID\",\n WORKFLOW_NOT_DEFINED: \"WORKFLOW_NOT_DEFINED\",\n WORKFLOW_TARGET_COLUMN_NOT_FOUND: \"WORKFLOW_TARGET_COLUMN_NOT_FOUND\",\n ATTACHMENT_NOT_FOUND: \"ATTACHMENT_NOT_FOUND\",\n ATTACHMENT_FILE_TOO_LARGE: \"ATTACHMENT_FILE_TOO_LARGE\",\n ATTACHMENT_LIMIT_EXCEEDED: \"ATTACHMENT_LIMIT_EXCEEDED\",\n ATTACHMENT_INVALID_FILE: \"ATTACHMENT_INVALID_FILE\",\n WORK_ITEM_NOT_RELEASABLE: \"WORK_ITEM_NOT_RELEASABLE\",\n GIT_RELEASE_COMMIT_MISMATCH: \"GIT_RELEASE_COMMIT_MISMATCH\",\n GIT_RELEASE_INVALID_SHA: \"GIT_RELEASE_INVALID_SHA\",\n GIT_RELEASE_BOARD_POSITION_CONFLICT: \"GIT_RELEASE_BOARD_POSITION_CONFLICT\",\n COLUMN_PROTECTED: \"COLUMN_PROTECTED\",\n COLUMN_LIMIT_EXCEEDED: \"COLUMN_LIMIT_EXCEEDED\",\n COLUMN_HAS_ACTIVE_AGENT_RUNS: \"COLUMN_HAS_ACTIVE_AGENT_RUNS\",\n WORK_ITEM_DELETE_FORBIDDEN: \"WORK_ITEM_DELETE_FORBIDDEN\",\n WORK_ITEM_DELETE_ACTIVE_AGENT_RUN: \"WORK_ITEM_DELETE_ACTIVE_AGENT_RUN\",\n WORK_ITEM_DELETE_CASCADE_NOT_CONFIRMED: \"WORK_ITEM_DELETE_CASCADE_NOT_CONFIRMED\",\n PROJECT_ACCESS_DENIED: \"PROJECT_ACCESS_DENIED\",\n PROJECT_ARCHIVED: \"PROJECT_ARCHIVED\",\n PROJECT_NOT_ARCHIVED: \"PROJECT_NOT_ARCHIVED\",\n PROJECT_DELETE_ACTIVE_AGENT_RUN: \"PROJECT_DELETE_ACTIVE_AGENT_RUN\",\n PROJECT_DELETE_KEY_MISMATCH: \"PROJECT_DELETE_KEY_MISMATCH\",\n PROJECT_DELETE_FORBIDDEN: \"PROJECT_DELETE_FORBIDDEN\",\n LABEL_NOT_FOUND: \"LABEL_NOT_FOUND\",\n LABEL_LIMIT_EXCEEDED: \"LABEL_LIMIT_EXCEEDED\",\n WORK_ITEM_LABEL_LIMIT_EXCEEDED: \"WORK_ITEM_LABEL_LIMIT_EXCEEDED\",\n LABEL_NAME_CONFLICT: \"LABEL_NAME_CONFLICT\",\n LABEL_INVALID_IDS: \"LABEL_INVALID_IDS\",\n FEEDBACK_NOT_FOUND: \"FEEDBACK_NOT_FOUND\",\n STAFF_ROLE_ALREADY_ASSIGNED: \"STAFF_ROLE_ALREADY_ASSIGNED\",\n STAFF_ROLE_NOT_ASSIGNED: \"STAFF_ROLE_NOT_ASSIGNED\",\n STAFF_ROLE_INCOMPATIBLE_WITH_ADMIN: \"STAFF_ROLE_INCOMPATIBLE_WITH_ADMIN\",\n CANNOT_ASSIGN_STAFF_ROLE_TO_SERVICE_USER: \"CANNOT_ASSIGN_STAFF_ROLE_TO_SERVICE_USER\",\n SUBSCRIPTION_PROJECT_LIMIT_REACHED: \"SUBSCRIPTION_PROJECT_LIMIT_REACHED\",\n SUBSCRIPTION_MEMBER_LIMIT_REACHED: \"SUBSCRIPTION_MEMBER_LIMIT_REACHED\",\n SUBSCRIPTION_PROJECT_READ_ONLY: \"SUBSCRIPTION_PROJECT_READ_ONLY\",\n SUBSCRIPTION_LLM_TIER_REQUIRED: \"SUBSCRIPTION_LLM_TIER_REQUIRED\",\n SUBSCRIPTION_ATTACHMENTS_TIER_REQUIRED: \"SUBSCRIPTION_ATTACHMENTS_TIER_REQUIRED\",\n SUBSCRIPTION_WEBHOOKS_TIER_REQUIRED: \"SUBSCRIPTION_WEBHOOKS_TIER_REQUIRED\",\n SUBSCRIPTION_TIER_INVALID: \"SUBSCRIPTION_TIER_INVALID\",\n SUBSCRIPTION_NOT_FOUND: \"SUBSCRIPTION_NOT_FOUND\",\n WEBHOOK_CONFIG_NOT_FOUND: \"WEBHOOK_CONFIG_NOT_FOUND\",\n WEBHOOK_URL_INVALID: \"WEBHOOK_URL_INVALID\",\n WEBHOOK_URL_SSRF_BLOCKED: \"WEBHOOK_URL_SSRF_BLOCKED\",\n WEBHOOK_SIGNING_SECRET_INVALID: \"WEBHOOK_SIGNING_SECRET_INVALID\",\n WEBHOOK_NOT_ENABLED: \"WEBHOOK_NOT_ENABLED\",\n SPRINTS_DISABLED: \"SPRINTS_DISABLED\",\n ADMIN_NOTIFICATION_SETTINGS_NOT_FOUND: \"ADMIN_NOTIFICATION_SETTINGS_NOT_FOUND\",\n ADMIN_NOTIFICATION_CHANNEL_INVALID: \"ADMIN_NOTIFICATION_CHANNEL_INVALID\",\n ADMIN_NOTIFICATION_EMAIL_RECIPIENT_REQUIRED: \"ADMIN_NOTIFICATION_EMAIL_RECIPIENT_REQUIRED\",\n ADMIN_NOTIFICATION_TELEGRAM_CONFIG_INCOMPLETE: \"ADMIN_NOTIFICATION_TELEGRAM_CONFIG_INCOMPLETE\"\n} as const;\n\nexport type ExceptionCode = (typeof EXCEPTION_CODE)[keyof typeof EXCEPTION_CODE];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { HealthResponse } from \"./health.types\";\n\n/**\n * Public liveness and version REST API contract.\n */\nexport interface HealthApi {\n /** Liveness probe with application semver. */\n getHealth(): Promise<HealthResponse>;\n}\n\n/** Outside /api/v1 \u2014 excluded from Nest global prefix in main.ts. */\nexport const HEALTH_PREFIX = \"/health\";\n\nexport const HEALTH_ROUTES: APIRoutes<HealthApi> = {\n getHealth: (): string => HEALTH_PREFIX\n};\n", "import type { IsoDateTimeString } from \"@task-boards/api/types/wire-types\";\n\nexport const HEALTH_STATUS = {\n OK: \"ok\"\n} as const;\n\nexport type HealthStatus = (typeof HEALTH_STATUS)[keyof typeof HEALTH_STATUS];\n\nexport interface HealthResponse {\n status: HealthStatus;\n timestamp: IsoDateTimeString;\n version: string;\n}\n", "export type { HealthApi } from \"./health.api\";\nexport { HEALTH_PREFIX, HEALTH_ROUTES } from \"./health.api\";\nexport * from \"./health.types\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { AdminOverviewResponse } from \"./admin.types\";\n\n/**\n * System admin dashboard API (human admins only).\n */\nexport interface AdminApi {\n /** Tenant-scoped aggregate KPI counts for the admin overview. */\n getOverview(): Promise<AdminOverviewResponse>;\n}\n\nexport const ADMIN_PREFIX = \"/admin\";\n\nexport const ADMIN_ROUTES: APIRoutes<AdminApi> = {\n getOverview: (): string => `${ADMIN_PREFIX}/overview`\n};\n", "export const ADMIN_NOTIFICATION_CHANNEL = {\n NONE: \"none\",\n EMAIL: \"email\",\n TELEGRAM: \"telegram\"\n} as const;\n\nexport type AdminNotificationChannel = (typeof ADMIN_NOTIFICATION_CHANNEL)[keyof typeof ADMIN_NOTIFICATION_CHANNEL];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n AdminNotificationSettingsResponse,\n UpdateAdminNotificationSettingsRequest\n} from \"./admin-notification-settings.types\";\nimport { ADMIN_PREFIX } from \"./admin.api\";\n\n/**\n * System admin outbound notification channel settings (singleton).\n */\nexport interface AdminNotificationSettingsApi {\n getNotificationSettings(): Promise<AdminNotificationSettingsResponse>;\n\n updateNotificationSettings(body: UpdateAdminNotificationSettingsRequest): Promise<AdminNotificationSettingsResponse>;\n\n sendTestNotification(): Promise<void>;\n}\n\nexport const ADMIN_NOTIFICATION_SETTINGS_PREFIX = `${ADMIN_PREFIX}/notification-settings`;\n\nexport const ADMIN_NOTIFICATION_SETTINGS_ROUTES: APIRoutes<AdminNotificationSettingsApi> = {\n getNotificationSettings: (): string => ADMIN_NOTIFICATION_SETTINGS_PREFIX,\n updateNotificationSettings: (): string => ADMIN_NOTIFICATION_SETTINGS_PREFIX,\n sendTestNotification: (): string => `${ADMIN_NOTIFICATION_SETTINGS_PREFIX}/test`\n};\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { SystemRole } from \"../auth/auth.types\";\nimport type { StaffRole } from \"../auth/staff-role.enum\";\nimport type { UserKind } from \"../auth/user-kind.enum\";\nimport type { SubscriptionTier } from \"../subscriptions/subscription-tier.enum\";\n\nimport { ADMIN_PREFIX } from \"./admin.api\";\nimport type { RegisteredWithinDays } from \"./admin-users.consts\";\n\nexport interface AdminUserResponse {\n id: string;\n email: string | null;\n displayName: string | null;\n systemRole: SystemRole;\n userKind: UserKind;\n staffRoles: StaffRole[];\n subscriptionTier: SubscriptionTier;\n /** Stored subscription expiry; null when no end date or no paid row. */\n subscriptionValidUntil: string | null;\n createdAt: string;\n lastActivityAt: string | null;\n}\n\nexport interface AdminUserListResponse {\n items: AdminUserResponse[];\n nextCursor: string | null;\n}\n\nexport interface ListAdminUsersQuery {\n cursor?: string;\n limit?: number;\n search?: string;\n systemRole?: SystemRole;\n registeredWithinDays?: RegisteredWithinDays;\n subscriptionTier?: SubscriptionTier;\n}\n\nexport interface AssignStaffRoleRequest {\n role: StaffRole;\n}\n\n/**\n * System admin user management (human admins only).\n * List tenant users and assign/revoke staff roles.\n */\nexport interface AdminUsersApi {\n /** List human users in the tenant. Keyset-paginated. */\n listUsers(query?: ListAdminUsersQuery): Promise<AdminUserListResponse>;\n\n /** Assign a staff role to a human user. */\n assignStaffRole(userId: string, body: AssignStaffRoleRequest): Promise<AdminUserResponse>;\n\n /** Revoke a staff role from a user. */\n revokeStaffRole(userId: string, role: StaffRole): Promise<AdminUserResponse>;\n}\n\nexport const ADMIN_USERS_ROUTES: APIRoutes<AdminUsersApi> = {\n listUsers: (): string => `${ADMIN_PREFIX}/users`,\n assignStaffRole: (userId: string): string => `${ADMIN_PREFIX}/users/${userId}/staff-roles`,\n revokeStaffRole: (userId: string, role: string): string => `${ADMIN_PREFIX}/users/${userId}/staff-roles/${role}`\n};\n", "export const REGISTERED_WITHIN_DAYS_OPTIONS = [7, 30] as const;\n\nexport type RegisteredWithinDays = (typeof REGISTERED_WITHIN_DAYS_OPTIONS)[number];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=admin.types.js.map", "export type { AdminApi } from \"./admin.api\";\nexport { ADMIN_PREFIX, ADMIN_ROUTES } from \"./admin.api\";\nexport { ADMIN_NOTIFICATION_CHANNEL } from \"./admin-notification-channel.enum\";\nexport type { AdminNotificationChannel } from \"./admin-notification-channel.enum\";\nexport type { AdminNotificationSettingsApi } from \"./admin-notification-settings.api\";\nexport {\n ADMIN_NOTIFICATION_SETTINGS_PREFIX,\n ADMIN_NOTIFICATION_SETTINGS_ROUTES\n} from \"./admin-notification-settings.api\";\nexport type {\n AdminNotificationSettingsResponse,\n UpdateAdminNotificationSettingsRequest\n} from \"./admin-notification-settings.types\";\nexport type {\n AdminUserListResponse,\n AdminUserResponse,\n AdminUsersApi,\n AssignStaffRoleRequest,\n ListAdminUsersQuery\n} from \"./admin-users.api\";\nexport { ADMIN_USERS_ROUTES } from \"./admin-users.api\";\nexport { REGISTERED_WITHIN_DAYS_OPTIONS } from \"./admin-users.consts\";\nexport type { RegisteredWithinDays } from \"./admin-users.consts\";\nexport * from \"./admin.types\";\n", "export enum SubscriptionSource {\n DEFAULT = \"DEFAULT\",\n ADMIN_GRANT = \"ADMIN_GRANT\",\n AUTO_PROMO = \"AUTO_PROMO\"\n}\n", "export enum SubscriptionAuditAction {\n GRANT = \"GRANT\",\n REVOKE = \"REVOKE\",\n TIER_CHANGE = \"TIER_CHANGE\"\n}\n", "export const PRICING_COMMITMENT_MONTHS = [3, 6, 9, 12] as const;\n\nexport type PricingCommitmentMonths = (typeof PRICING_COMMITMENT_MONTHS)[number];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { AccountSubscriptionResponse, CompleteTierSelectionRequest } from \"./subscriptions.types\";\n\n/**\n * Authenticated human account subscription / billing summary.\n */\nexport interface SubscriptionsAccountApi {\n /** Current tier, usage, limits, and plan comparison (no checkout in MVP). */\n getSubscription(): Promise<AccountSubscriptionResponse>;\n\n /** Record initial tier choice after registration / on first sign-in (MVP: paid tiers await admin grant). */\n completeTierSelection(body: CompleteTierSelectionRequest): Promise<void>;\n}\n\nexport const ACCOUNT_SUBSCRIPTION_PREFIX = \"/account/subscription\";\n\nexport const ACCOUNT_SUBSCRIPTION_ROUTES: APIRoutes<SubscriptionsAccountApi> = {\n getSubscription: (): string => ACCOUNT_SUBSCRIPTION_PREFIX,\n completeTierSelection: (): string => `${ACCOUNT_SUBSCRIPTION_PREFIX}/tier-selection`\n};\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { AdminUserResponse } from \"../admin/admin-users.api\";\nimport { ADMIN_PREFIX } from \"../admin/admin.api\";\n\nimport type { SubscriptionTier } from \"./subscription-tier.enum\";\nimport type {\n AdminSubscriptionStatsResponse,\n GrantSubscriptionRequest,\n PricingPlanResponse,\n RevokeSubscriptionRequest,\n SubscriptionSettingsResponse,\n UpdatePricingPlanRequest,\n UpdateSubscriptionSettingsRequest\n} from \"./subscriptions.types\";\n\n/**\n * System admin subscription management (pricing, grants, stats).\n */\nexport interface AdminSubscriptionsApi {\n listPricingPlans(): Promise<PricingPlanResponse[]>;\n\n updatePricingPlan(tier: SubscriptionTier, body: UpdatePricingPlanRequest): Promise<PricingPlanResponse>;\n\n getSubscriptionStats(): Promise<AdminSubscriptionStatsResponse>;\n\n grantUserSubscription(userId: string, body: GrantSubscriptionRequest): Promise<AdminUserResponse>;\n\n revokeUserSubscription(userId: string, body: RevokeSubscriptionRequest): Promise<AdminUserResponse>;\n\n getSubscriptionSettings(): Promise<SubscriptionSettingsResponse>;\n\n updateSubscriptionSettings(body: UpdateSubscriptionSettingsRequest): Promise<SubscriptionSettingsResponse>;\n}\n\nexport const ADMIN_PRICING_PLANS_PREFIX = `${ADMIN_PREFIX}/pricing-plans`;\nexport const ADMIN_SUBSCRIPTIONS_PREFIX = `${ADMIN_PREFIX}/subscriptions`;\n\nexport const ADMIN_SUBSCRIPTIONS_ROUTES: APIRoutes<AdminSubscriptionsApi> = {\n listPricingPlans: (): string => ADMIN_PRICING_PLANS_PREFIX,\n updatePricingPlan: (tier: string): string => `${ADMIN_PRICING_PLANS_PREFIX}/${tier}`,\n getSubscriptionStats: (): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/stats`,\n grantUserSubscription: (userId: string): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/users/${userId}/grant`,\n revokeUserSubscription: (userId: string): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/users/${userId}/revoke`,\n getSubscriptionSettings: (): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/settings`,\n updateSubscriptionSettings: (): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/settings`\n};\n", "export { SubscriptionTier } from \"./subscription-tier.enum\";\nexport { SubscriptionSource } from \"./subscription-source.enum\";\nexport { SubscriptionAuditAction } from \"./subscription-audit-action.enum\";\nexport { PRICING_COMMITMENT_MONTHS } from \"./pricing-commitment-months\";\nexport type { PricingCommitmentMonths } from \"./pricing-commitment-months\";\nexport type {\n AccountSubscriptionResponse,\n AdminSubscriptionStatsResponse,\n CompleteTierSelectionRequest,\n GrantSubscriptionRequest,\n PricingPlanResponse,\n RevokeSubscriptionRequest,\n SubscriptionEntitlements,\n SubscriptionExpiryWarning,\n SubscriptionReadOnlyProject,\n SubscriptionSettingsResponse,\n UpdatePricingPlanRequest,\n UpdateSubscriptionSettingsRequest\n} from \"./subscriptions.types\";\nexport type { SubscriptionsAccountApi } from \"./subscriptions.api\";\nexport { ACCOUNT_SUBSCRIPTION_PREFIX, ACCOUNT_SUBSCRIPTION_ROUTES } from \"./subscriptions.api\";\nexport type { AdminSubscriptionsApi } from \"./admin-subscriptions.api\";\nexport {\n ADMIN_PRICING_PLANS_PREFIX,\n ADMIN_SUBSCRIPTIONS_PREFIX,\n ADMIN_SUBSCRIPTIONS_ROUTES\n} from \"./admin-subscriptions.api\";\n", "export * as Auth from \"./auth\";\nexport type {\n AuthApi,\n AuthMessageResponse,\n ChangePasswordRequest,\n LoginRequest,\n PasswordPolicy,\n PasswordPolicyResponse,\n PasswordPolicyRule,\n RegisterCaptchaConfigResponse,\n RegisterRequest,\n ResendConfirmationRequest,\n UpdateProfileRequest,\n UserInfo\n} from \"./auth\";\nexport {\n buildPasswordPolicy,\n DEFAULT_PASSWORD_COMPLEXITY,\n getFailedPasswordRules,\n isPasswordValid\n} from \"./auth/password-policy.util\";\nexport { AUTH_PREFIX, AUTH_ROUTES } from \"./auth/auth.api\";\nexport * from \"./account\";\nexport * from \"./api-tokens/api-tokens.api\";\nexport * from \"./api-tokens/api-tokens.types\";\nexport * from \"./enums/api-token-scope.enum\";\nexport * from \"./auth/auth.types\";\nexport { StaffCapability, StaffRole, STAFF_ROLE_CAPABILITIES } from \"./auth\";\nexport { UserKind } from \"./auth/user-kind.enum\";\nexport { DEFAULT_SERVICE_USER_ID, SERVICE_USER_DISPLAY_NAME } from \"./auth/service-user.consts\";\nexport * from \"./members/members.api\";\nexport * from \"./members/members.types\";\nexport * from \"./members/invitations.enums\";\nexport * from \"./imports\";\nexport * from \"./exceptions/exception-codes\";\nexport * from \"./health\";\nexport * from \"./admin\";\nexport * from \"./subscriptions\";\n", "export const WS_PING_INTERVAL_MS = 25000;\n\nexport const WS_PONG_TIMEOUT_MS = 10000;\n\nexport const WS_CLIENT_WATCHDOG_MS = 75000;\n\nexport const WS_AUTH_HANDSHAKE_TIMEOUT_MS = 5000;\n\nexport const WS_CONNECT_TIMEOUT_MS = 10000;\n", "export const REALTIME_SERVER_EVENT = {\n WORK_ITEM_CREATED: \"work_item.created\",\n WORK_ITEM_UPDATED: \"work_item.updated\",\n WORK_ITEM_MOVED: \"work_item.moved\",\n AGENT_RUN_STATUS_CHANGED: \"agent_run.status_changed\",\n COMMENT_CREATED: \"comment.created\",\n COMMENT_DELETED: \"comment.deleted\",\n WORK_ITEM_DELETED: \"work_item.deleted\",\n PROJECT_IMPORT_COMPLETED: \"project.import_completed\",\n PRESENCE_UPDATED: \"presence.updated\",\n COLUMN_REORDERED: \"column.reordered\",\n NOTIFICATION_CREATED: \"notification.created\",\n PING: \"ping\"\n} as const;\n\nexport interface ProjectImportCompletedPayload {\n projectId: string;\n createdWorkItems: number;\n}\n\nexport type RealtimeServerEvent = (typeof REALTIME_SERVER_EVENT)[keyof typeof REALTIME_SERVER_EVENT];\n\nexport const REALTIME_CLIENT_MESSAGE = {\n SUBSCRIBE: \"subscribe\",\n UNSUBSCRIBE: \"unsubscribe\",\n PONG: \"pong\"\n} as const;\n\nexport type RealtimeClientMessage = (typeof REALTIME_CLIENT_MESSAGE)[keyof typeof REALTIME_CLIENT_MESSAGE];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=realtime.types.js.map", "/**\n * Formats a human-readable work item key from project key and sequence number.\n */\nexport function formatWorkItemDisplayKey(projectKey: string, number: number): string {\n return `${projectKey}-${number}`;\n}\n", "/** Canonical regex (case-insensitive UUID segment). */\nexport const STORY_BRANCH_PATTERN = /^story\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:-.+)?$/i;\n\nconst GIT_SHA_PATTERN = /^[0-9a-f]{40}$/i;\n\nconst REF_PREFIX_PATTERN = /^(?:refs\\/heads\\/|origin\\/)+/;\n\n/**\n * Parses a branch name `story/{uuid}` or `story/{uuid}-slug` into a canonical lowercase work item id.\n */\nexport function parseStoryBranchWorkItemId(branchName: string): string | null {\n const match = STORY_BRANCH_PATTERN.exec(branchName.trim());\n if (!match) {\n return null;\n }\n\n return match[1].toLowerCase();\n}\n\n/**\n * Parses a git ref (`refs/heads/story/...`, `origin/story/...`, or bare branch name).\n */\nexport function parseStoryBranchRef(ref: string): string | null {\n const normalizedRef = ref.trim().replace(REF_PREFIX_PATTERN, \"\");\n return parseStoryBranchWorkItemId(normalizedRef);\n}\n\n/** Returns true when `sha` is a full 40-character hexadecimal git commit id. */\nexport function isValidGitSha(sha: string): boolean {\n return GIT_SHA_PATTERN.test(sha.trim());\n}\n", "/** Matches `work-item:{uuid}`; UUID segment is case-insensitive. */\nconst WORK_ITEM_COMMIT_TAG_PATTERN = /work-item:\\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi;\n\n/**\n * Formats a canonical work-item tag for git commit messages.\n */\nexport function formatWorkItemCommitTag(workItemId: string): string {\n return `work-item:${workItemId.trim().toLowerCase()}`;\n}\n\n/**\n * Parses all distinct work-item ids from a commit message (subject + body).\n * Returns canonical lowercase UUIDs in first-seen order.\n */\nexport function parseWorkItemIdsFromCommitMessage(message: string): string[] {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n for (const match of message.matchAll(WORK_ITEM_COMMIT_TAG_PATTERN)) {\n const id = match[1].toLowerCase();\n if (!seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n\n return ids;\n}\n", "import type { SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport type { SubagentRoleBinding, SubagentRoleBindings } from \"@task-boards/api/projects/projects.types\";\n\n/** Legacy wire format before enabled toggle (still accepted on ingress). */\nexport type LegacySubagentRoleBindings = Partial<Record<SubagentRole, string>>;\n\nexport function createSubagentRoleBinding(slug: string, enabled = true): SubagentRoleBinding {\n return {\n slug: slug.trim(),\n enabled\n };\n}\n\nexport function parseSubagentRoleBinding(value: unknown): SubagentRoleBinding | null {\n if (typeof value === \"string\") {\n const slug = value.trim();\n if (slug.length === 0) {\n return null;\n }\n\n return createSubagentRoleBinding(slug, true);\n }\n\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n\n const record = value as { slug?: unknown; enabled?: unknown };\n if (typeof record.slug !== \"string\") {\n return null;\n }\n\n const slug = record.slug.trim();\n if (slug.length === 0) {\n return null;\n }\n\n const enabled = record.enabled === undefined ? true : record.enabled === true;\n\n return createSubagentRoleBinding(slug, enabled);\n}\n\nexport function normalizeSubagentRoleBindings(\n bindings: SubagentRoleBindings | LegacySubagentRoleBindings | Record<string, unknown>\n): SubagentRoleBindings {\n const normalized: SubagentRoleBindings = {};\n\n for (const [role, value] of Object.entries(bindings)) {\n const binding = parseSubagentRoleBinding(value);\n if (binding !== null) {\n normalized[role as SubagentRole] = binding;\n }\n }\n\n return normalized;\n}\n\nexport function isSubagentRoleActive(bindings: SubagentRoleBindings, role: SubagentRole): boolean {\n const binding = bindings[role];\n if (binding === undefined) {\n return false;\n }\n\n return binding.enabled && binding.slug.trim().length > 0;\n}\n", "import type { SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\n\nimport { isSubagentRoleActive } from \"./subagent-role-bindings.normalize\";\nimport type { SubagentRoleBindings } from \"./subagent-role.types\";\n\n/**\n * Resolves the IDE subagent slug for an active role from project bindings.\n * Returns null when the role is disabled, missing, or has an empty slug.\n */\nexport function resolveSubagentSlug(bindings: SubagentRoleBindings, role: SubagentRole): string | null {\n if (!isSubagentRoleActive(bindings, role)) {\n return null;\n }\n\n return bindings[role]?.slug ?? null;\n}\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nexport function workflowPhaseToSubagentRole(phase: WorkflowPhase): SubagentRole {\n switch (phase) {\n case WORKFLOW_PHASE.PRODUCT:\n return SUBAGENT_ROLE.PRODUCT;\n case WORKFLOW_PHASE.ANALYST:\n return SUBAGENT_ROLE.ANALYST;\n case WORKFLOW_PHASE.ARCHITECT:\n return SUBAGENT_ROLE.ARCHITECT;\n case WORKFLOW_PHASE.DESIGNER:\n return SUBAGENT_ROLE.DESIGNER;\n case WORKFLOW_PHASE.DEVELOPMENT:\n return SUBAGENT_ROLE.DEVELOPER;\n default: {\n const _exhaustive: never = phase;\n return _exhaustive;\n }\n }\n}\n\nexport function subagentRoleToWorkflowPhase(role: SubagentRole): WorkflowPhase | null {\n switch (role) {\n case SUBAGENT_ROLE.PRODUCT:\n return WORKFLOW_PHASE.PRODUCT;\n case SUBAGENT_ROLE.ANALYST:\n return WORKFLOW_PHASE.ANALYST;\n case SUBAGENT_ROLE.ARCHITECT:\n return WORKFLOW_PHASE.ARCHITECT;\n case SUBAGENT_ROLE.DESIGNER:\n return WORKFLOW_PHASE.DESIGNER;\n case SUBAGENT_ROLE.FRONTEND_DEVELOPER:\n case SUBAGENT_ROLE.DEVELOPER:\n return WORKFLOW_PHASE.DEVELOPMENT;\n default:\n return null;\n }\n}\n\n/** @deprecated Use workflowPhaseToSubagentRole */\nexport const workflowPhaseToAgentRole = workflowPhaseToSubagentRole;\n\n/** @deprecated Use subagentRoleToWorkflowPhase */\nexport const agentRoleToWorkflowPhase = subagentRoleToWorkflowPhase;\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nimport { resolveSubagentSlug } from \"../subagent-role/subagent-role.util\";\nimport type { SubagentRoleBindings } from \"../subagent-role/subagent-role.types\";\n\nimport { workflowPhaseToSubagentRole } from \"./workflow-phase-subagent-role.map\";\n\nexport const IN_ANALYSIS_PHASE_CHAIN = [\n WORKFLOW_PHASE.PRODUCT,\n WORKFLOW_PHASE.ANALYST,\n WORKFLOW_PHASE.ARCHITECT\n] as const;\n\nexport type InAnalysisPhase = (typeof IN_ANALYSIS_PHASE_CHAIN)[number];\n\nexport const DEVELOPMENT_DEV_ROLES = [SUBAGENT_ROLE.FRONTEND_DEVELOPER, SUBAGENT_ROLE.DEVELOPER] as const;\n\nexport const AGENTIC_SDLC_COLUMN_CLAIM_PRIORITY: Record<string, number> = {\n \"in-development\": 1,\n \"in-qa\": 2,\n \"in-analysis\": 3\n};\n\nexport function isRoleBound(bindings: SubagentRoleBindings, role: SubagentRole): boolean {\n return resolveSubagentSlug(bindings, role) !== null;\n}\n\nexport function getFirstConfiguredAnalysisPhase(bindings: SubagentRoleBindings): WorkflowPhase | null {\n for (const phase of IN_ANALYSIS_PHASE_CHAIN) {\n const role = workflowPhaseToSubagentRole(phase);\n if (isRoleBound(bindings, role)) {\n return phase;\n }\n }\n\n return null;\n}\n\nexport function getNextAnalysisPhase(current: WorkflowPhase): WorkflowPhase | null {\n const index = IN_ANALYSIS_PHASE_CHAIN.indexOf(current as InAnalysisPhase);\n if (index < 0 || index >= IN_ANALYSIS_PHASE_CHAIN.length - 1) {\n return null;\n }\n\n return IN_ANALYSIS_PHASE_CHAIN[index + 1] ?? null;\n}\n\nexport function advanceAnalysisPhaseSkippingUnbound(\n phase: WorkflowPhase,\n bindings: SubagentRoleBindings\n): WorkflowPhase | null {\n let next: WorkflowPhase | null = getNextAnalysisPhase(phase);\n\n while (next !== null) {\n const role = workflowPhaseToSubagentRole(next);\n if (isRoleBound(bindings, role)) {\n return next;\n }\n\n next = getNextAnalysisPhase(next);\n }\n\n return null;\n}\n\nexport function initPendingDevRoles(bindings: SubagentRoleBindings): SubagentRole[] {\n return DEVELOPMENT_DEV_ROLES.filter(role => isRoleBound(bindings, role));\n}\n\nexport function removeDevRoleFromPending(pendingDevRoles: SubagentRole[], completedRole: SubagentRole): SubagentRole[] {\n return pendingDevRoles.filter(role => role !== completedRole);\n}\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { AGENT_RUN_OUTCOME, type AgentRunOutcome } from \"@task-boards/api/enums/agent-run-outcome.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nimport { getNextAnalysisPhase, removeDevRoleFromPending } from \"./agentic-sdlc-phase-chain\";\nimport { subagentRoleToWorkflowPhase } from \"./workflow-phase-subagent-role.map\";\n\nexport const IN_AWAITING_COLUMN_SLUG = \"in-awaiting\";\n\nexport const AGENTIC_SDLC_AGENT_COLUMN_SLUGS = [\"in-analysis\", \"in-development\", \"in-qa\"] as const;\n\nexport type AgenticSdlcAgentColumnSlug = (typeof AGENTIC_SDLC_AGENT_COLUMN_SLUGS)[number];\n\nconst AGENTIC_SDLC_AGENT_COLUMN_SLUG_SET = new Set<string>(AGENTIC_SDLC_AGENT_COLUMN_SLUGS);\n\nexport function isAgenticSdlcAgentColumnSlug(columnSlug: string): columnSlug is AgenticSdlcAgentColumnSlug {\n return AGENTIC_SDLC_AGENT_COLUMN_SLUG_SET.has(columnSlug);\n}\n\nexport function isInAnalysisPhaseColumn(columnSlug: string): boolean {\n return columnSlug === \"in-analysis\";\n}\n\nexport interface WorkflowTransition {\n defaultNextSlug: string;\n outcomes?: Partial<Record<AgentRunOutcome, string>>;\n}\n\nexport const AGENTIC_SDLC_WORKFLOW: Record<string, WorkflowTransition> = {\n \"in-analysis\": {\n defaultNextSlug: \"in-development\",\n outcomes: {\n [AGENT_RUN_OUTCOME.SKIP_DESIGN]: \"in-development\"\n }\n },\n \"in-development\": {\n defaultNextSlug: \"in-qa\"\n },\n \"in-qa\": {\n defaultNextSlug: \"done\",\n outcomes: {\n [AGENT_RUN_OUTCOME.HAS_BUGS]: \"in-development\"\n }\n }\n};\n\nexport const WORKFLOW_TRANSITION_KIND = {\n MOVE: \"MOVE\",\n HANDOFF: \"HANDOFF\",\n STAY: \"STAY\"\n} as const;\n\nexport type WorkflowTransitionKind = (typeof WORKFLOW_TRANSITION_KIND)[keyof typeof WORKFLOW_TRANSITION_KIND];\n\nexport interface WorkflowTransitionResult {\n kind: WorkflowTransitionKind;\n nextColumnSlug: string | null;\n nextWorkflowPhase: WorkflowPhase | null;\n nextAgentRole: SubagentRole | null;\n}\n\nexport interface AgenticSdlcTransitionContext {\n workflowPhase: WorkflowPhase | null;\n agentRole: SubagentRole;\n designerRequired?: boolean;\n pendingDevRoles?: SubagentRole[];\n}\n\nfunction moveTransition(\n nextColumnSlug: string,\n nextWorkflowPhase: WorkflowPhase | null,\n nextAgentRole: SubagentRole | null\n): WorkflowTransitionResult {\n return {\n kind: WORKFLOW_TRANSITION_KIND.MOVE,\n nextColumnSlug,\n nextWorkflowPhase,\n nextAgentRole\n };\n}\n\nfunction handoffTransition(\n nextColumnSlug: string,\n nextWorkflowPhase: WorkflowPhase,\n nextAgentRole: SubagentRole\n): WorkflowTransitionResult {\n return {\n kind: WORKFLOW_TRANSITION_KIND.HANDOFF,\n nextColumnSlug,\n nextWorkflowPhase,\n nextAgentRole\n };\n}\n\nfunction stayTransition(\n nextColumnSlug: string,\n nextWorkflowPhase: WorkflowPhase | null,\n nextAgentRole: SubagentRole | null\n): WorkflowTransitionResult {\n return {\n kind: WORKFLOW_TRANSITION_KIND.STAY,\n nextColumnSlug,\n nextWorkflowPhase,\n nextAgentRole\n };\n}\n\nfunction resolveInAnalysisTransition(\n outcome: AgentRunOutcome,\n workflowPhase: WorkflowPhase | null\n): WorkflowTransitionResult | null {\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return moveTransition(IN_AWAITING_COLUMN_SLUG, workflowPhase, null);\n }\n\n if (workflowPhase === WORKFLOW_PHASE.PRODUCT) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n const nextPhase = getNextAnalysisPhase(WORKFLOW_PHASE.PRODUCT);\n if (nextPhase === null) {\n return null;\n }\n\n return handoffTransition(\"in-analysis\", nextPhase, workflowPhaseToSubagentRoleForHandoff(nextPhase));\n }\n\n return null;\n }\n\n if (workflowPhase === WORKFLOW_PHASE.ANALYST) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n return handoffTransition(\"in-analysis\", WORKFLOW_PHASE.ARCHITECT, SUBAGENT_ROLE.ARCHITECT);\n }\n\n if (outcome === AGENT_RUN_OUTCOME.SKIP_DESIGN) {\n return moveTransition(\"in-development\", WORKFLOW_PHASE.DEVELOPMENT, null);\n }\n\n return null;\n }\n\n if (workflowPhase === WORKFLOW_PHASE.ARCHITECT) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT || outcome === AGENT_RUN_OUTCOME.SKIP_DESIGN) {\n return moveTransition(\"in-development\", null, null);\n }\n\n return null;\n }\n\n return null;\n}\n\nfunction workflowPhaseToSubagentRoleForHandoff(phase: WorkflowPhase): SubagentRole {\n if (phase === WORKFLOW_PHASE.ANALYST) {\n return SUBAGENT_ROLE.ANALYST;\n }\n\n if (phase === WORKFLOW_PHASE.ARCHITECT) {\n return SUBAGENT_ROLE.ARCHITECT;\n }\n\n if (phase === WORKFLOW_PHASE.PRODUCT) {\n return SUBAGENT_ROLE.PRODUCT;\n }\n\n if (phase === WORKFLOW_PHASE.DESIGNER) {\n return SUBAGENT_ROLE.DESIGNER;\n }\n\n return SUBAGENT_ROLE.DEVELOPER;\n}\n\nfunction resolveInDevelopmentTransition(\n outcome: AgentRunOutcome,\n context: AgenticSdlcTransitionContext\n): WorkflowTransitionResult | null {\n const workflowPhase = context.workflowPhase;\n\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return moveTransition(IN_AWAITING_COLUMN_SLUG, workflowPhase, null);\n }\n\n if (workflowPhase === WORKFLOW_PHASE.DESIGNER) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT || outcome === AGENT_RUN_OUTCOME.SKIP_DESIGN) {\n return handoffTransition(\"in-development\", WORKFLOW_PHASE.DEVELOPMENT, SUBAGENT_ROLE.DEVELOPER);\n }\n\n return null;\n }\n\n if (workflowPhase === WORKFLOW_PHASE.DEVELOPMENT || workflowPhase === null) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n const pending = context.pendingDevRoles ?? [context.agentRole];\n const remaining = removeDevRoleFromPending(pending, context.agentRole);\n\n if (remaining.length > 0) {\n return stayTransition(\"in-development\", WORKFLOW_PHASE.DEVELOPMENT, null);\n }\n\n return moveTransition(\"in-qa\", null, SUBAGENT_ROLE.QA);\n }\n\n return null;\n }\n\n return null;\n}\n\nfunction resolveInQaTransition(outcome: AgentRunOutcome): WorkflowTransitionResult | null {\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return moveTransition(IN_AWAITING_COLUMN_SLUG, null, null);\n }\n\n const transition: WorkflowTransition | undefined = AGENTIC_SDLC_WORKFLOW[\"in-qa\"];\n if (!transition) {\n return null;\n }\n\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n return moveTransition(transition.defaultNextSlug, null, null);\n }\n\n const outcomeNextSlug: string | undefined = transition.outcomes?.[outcome];\n if (!outcomeNextSlug) {\n return null;\n }\n\n if (outcome === AGENT_RUN_OUTCOME.HAS_BUGS) {\n return moveTransition(outcomeNextSlug, WORKFLOW_PHASE.DEVELOPMENT, null);\n }\n\n return moveTransition(outcomeNextSlug, null, null);\n}\n\n/**\n * Resolves the next workflow step for an AGENTIC_SDLC transition, including phase handoffs.\n *\n * @returns Transition result, or `null` when `outcome` is FAILED or the transition is invalid.\n */\nexport function resolveAgenticSdlcTransition(\n currentColumnSlug: string,\n outcome: AgentRunOutcome,\n context: AgenticSdlcTransitionContext\n): WorkflowTransitionResult | null {\n if (outcome === AGENT_RUN_OUTCOME.FAILED) {\n return null;\n }\n\n if (currentColumnSlug === \"in-analysis\") {\n const phase: WorkflowPhase | null = context.workflowPhase ?? subagentRoleToWorkflowPhase(context.agentRole);\n\n return resolveInAnalysisTransition(outcome, phase);\n }\n\n if (currentColumnSlug === \"in-development\") {\n return resolveInDevelopmentTransition(outcome, context);\n }\n\n if (currentColumnSlug === \"in-qa\") {\n return resolveInQaTransition(outcome);\n }\n\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return null;\n }\n\n return null;\n}\n\n/**\n * Resolves the next column slug for an AGENTIC_SDLC workflow transition.\n *\n * @returns Next column slug for MOVE transitions only; `null` for HANDOFF, STAY, FAILED, or invalid input.\n */\nexport function resolveAgenticSdlcNextColumnSlug(\n currentColumnSlug: string,\n outcome: AgentRunOutcome,\n context?: AgenticSdlcTransitionContext\n): string | null {\n if (!context) {\n if (currentColumnSlug === \"in-analysis\") {\n return null;\n }\n\n const fallbackContext: AgenticSdlcTransitionContext = {\n workflowPhase: null,\n agentRole: SUBAGENT_ROLE.ANALYST\n };\n\n const transition: WorkflowTransitionResult | null = resolveAgenticSdlcTransition(\n currentColumnSlug,\n outcome,\n fallbackContext\n );\n\n if (transition?.kind !== WORKFLOW_TRANSITION_KIND.MOVE) {\n return null;\n }\n\n return transition.nextColumnSlug;\n }\n\n const transition: WorkflowTransitionResult | null = resolveAgenticSdlcTransition(currentColumnSlug, outcome, context);\n\n if (transition?.kind !== WORKFLOW_TRANSITION_KIND.MOVE) {\n return null;\n }\n\n return transition.nextColumnSlug;\n}\n\nexport {\n agentRoleToWorkflowPhase,\n subagentRoleToWorkflowPhase,\n workflowPhaseToAgentRole,\n workflowPhaseToSubagentRole\n} from \"./workflow-phase-subagent-role.map\";\n\nexport {\n AGENTIC_SDLC_COLUMN_CLAIM_PRIORITY,\n DEVELOPMENT_DEV_ROLES,\n IN_ANALYSIS_PHASE_CHAIN,\n advanceAnalysisPhaseSkippingUnbound,\n getFirstConfiguredAnalysisPhase,\n getNextAnalysisPhase,\n initPendingDevRoles,\n isRoleBound,\n removeDevRoleFromPending,\n type InAnalysisPhase\n} from \"./agentic-sdlc-phase-chain\";\n", "import { BOARD_PRESET_CODE, type BoardPresetCode } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { WORK_ITEM_TYPE, type WorkItemType } from \"@task-boards/api/enums/work-item-type.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nimport { AGENTIC_SDLC_AGENT_COLUMN_SLUGS } from \"./agentic-sdlc.workflow\";\n\nexport interface AgenticPhasesProject {\n presetCode: BoardPresetCode;\n agenticSdlcPhasesEnabled: boolean;\n}\n\nexport interface ColumnSlugContext {\n workflowPhase: WorkflowPhase | null;\n assignedAgentRole: SubagentRole | null;\n pendingDevRoles: SubagentRole[];\n}\n\nconst LOGICAL_AGENT_COLUMN_SLUG_SET = new Set<string>(AGENTIC_SDLC_AGENT_COLUMN_SLUGS);\n\nconst ANALYSIS_WORKFLOW_PHASES = new Set<WorkflowPhase>([\n WORKFLOW_PHASE.PRODUCT,\n WORKFLOW_PHASE.ANALYST,\n WORKFLOW_PHASE.ARCHITECT\n]);\n\nexport function isAgenticPhasesEnabled(project: AgenticPhasesProject): boolean {\n if (project.presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC) {\n return true;\n }\n\n return project.agenticSdlcPhasesEnabled;\n}\n\nexport function isLogicalAgentColumnSlug(slug: string): boolean {\n return LOGICAL_AGENT_COLUMN_SLUG_SET.has(slug);\n}\n\nfunction resolveInProgressLogicalSlug(ctx: ColumnSlugContext): string | null {\n if (ctx.assignedAgentRole === SUBAGENT_ROLE.QA) {\n return \"in-qa\";\n }\n\n if (ctx.workflowPhase === WORKFLOW_PHASE.DEVELOPMENT || ctx.workflowPhase === WORKFLOW_PHASE.DESIGNER) {\n return \"in-development\";\n }\n\n if (ctx.workflowPhase !== null && ANALYSIS_WORKFLOW_PHASES.has(ctx.workflowPhase)) {\n return \"in-analysis\";\n }\n\n return null;\n}\n\nexport function toLogicalColumnSlug(\n physicalColumnSlug: string,\n presetCode: BoardPresetCode,\n ctx: ColumnSlugContext\n): string | null {\n if (presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC) {\n return physicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.KANBAN) {\n if (physicalColumnSlug === \"in-progress\") {\n return resolveInProgressLogicalSlug(ctx);\n }\n\n return physicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.SCRUM) {\n if (physicalColumnSlug === \"in-review\") {\n return \"in-qa\";\n }\n\n if (physicalColumnSlug === \"in-progress\") {\n return resolveInProgressLogicalSlug(ctx);\n }\n\n return physicalColumnSlug;\n }\n\n return physicalColumnSlug;\n}\n\nexport function toPhysicalColumnSlug(logicalColumnSlug: string, presetCode: BoardPresetCode): string {\n if (presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC) {\n return logicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.KANBAN) {\n if (logicalColumnSlug === \"in-awaiting\") {\n return \"backlog\";\n }\n\n if (isLogicalAgentColumnSlug(logicalColumnSlug)) {\n return \"in-progress\";\n }\n\n return logicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.SCRUM) {\n if (logicalColumnSlug === \"in-awaiting\") {\n return \"backlog\";\n }\n\n if (logicalColumnSlug === \"in-qa\") {\n return \"in-review\";\n }\n\n if (logicalColumnSlug === \"in-analysis\" || logicalColumnSlug === \"in-development\") {\n return \"in-progress\";\n }\n\n return logicalColumnSlug;\n }\n\n return logicalColumnSlug;\n}\n\nexport function shouldSyntheticEnqueue(\n project: AgenticPhasesProject,\n physicalColumnSlug: string,\n ctx: ColumnSlugContext & { workItemType: WorkItemType }\n): boolean {\n if (!isAgenticPhasesEnabled(project)) {\n return false;\n }\n\n if (ctx.workItemType !== WORK_ITEM_TYPE.STORY) {\n return false;\n }\n\n const logicalSlug = toLogicalColumnSlug(physicalColumnSlug, project.presetCode, ctx);\n\n return logicalSlug !== null && isLogicalAgentColumnSlug(logicalSlug);\n}\n\n/** Resolves logical agent column slug from a work item's physical column and workflow state. */\nexport function resolveLogicalColumnSlugForWorkItem(\n presetCode: BoardPresetCode,\n physicalColumnSlug: string | null,\n workflowPhase: WorkflowPhase | null,\n assignedAgentRole: SubagentRole | null,\n pendingDevRoles: SubagentRole[] = []\n): string | null {\n if (physicalColumnSlug === null) {\n return null;\n }\n\n return toLogicalColumnSlug(physicalColumnSlug, presetCode, {\n workflowPhase,\n assignedAgentRole,\n pendingDevRoles\n });\n}\n", "export {\n isLogicalAgentColumnSlug,\n resolveLogicalColumnSlugForWorkItem,\n shouldSyntheticEnqueue,\n toLogicalColumnSlug,\n toPhysicalColumnSlug,\n type AgenticPhasesProject,\n type ColumnSlugContext\n} from \"./column-slug-mapping\";\nexport {\n AGENTIC_SDLC_AGENT_COLUMN_SLUGS,\n AGENTIC_SDLC_COLUMN_CLAIM_PRIORITY,\n AGENTIC_SDLC_WORKFLOW,\n DEVELOPMENT_DEV_ROLES,\n IN_ANALYSIS_PHASE_CHAIN,\n IN_AWAITING_COLUMN_SLUG,\n WORKFLOW_TRANSITION_KIND,\n advanceAnalysisPhaseSkippingUnbound,\n agentRoleToWorkflowPhase,\n getFirstConfiguredAnalysisPhase,\n getNextAnalysisPhase,\n initPendingDevRoles,\n isAgenticSdlcAgentColumnSlug,\n isInAnalysisPhaseColumn,\n isRoleBound,\n removeDevRoleFromPending,\n resolveAgenticSdlcNextColumnSlug,\n resolveAgenticSdlcTransition,\n subagentRoleToWorkflowPhase,\n workflowPhaseToAgentRole,\n workflowPhaseToSubagentRole,\n type AgenticSdlcAgentColumnSlug,\n type AgenticSdlcTransitionContext,\n type InAnalysisPhase,\n type WorkflowTransition,\n type WorkflowTransitionKind,\n type WorkflowTransitionResult\n} from \"./agentic-sdlc.workflow\";\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\n\nimport type { SubagentRoleBindings } from \"./subagent-role.types\";\n\n/** Default AGENTIC_SDLC bindings seeded for existing projects during migration. */\nexport const DEFAULT_AGENTIC_SDLC_SUBAGENT_BINDINGS: SubagentRoleBindings = {\n [SUBAGENT_ROLE.ANALYST]: { slug: \"functional-analyst\", enabled: true },\n [SUBAGENT_ROLE.ARCHITECT]: { slug: \"solution-architect-senior\", enabled: true },\n [SUBAGENT_ROLE.DEVELOPER]: { slug: \"senior-web-developer\", enabled: true },\n [SUBAGENT_ROLE.QA]: { slug: \"senior-qa-engineer\", enabled: true }\n};\n\nexport const SUBAGENT_ROLE_LABEL: Record<SubagentRole, string> = {\n [SUBAGENT_ROLE.PRODUCT]: \"Product\",\n [SUBAGENT_ROLE.ARCHITECT]: \"Architect\",\n [SUBAGENT_ROLE.ANALYST]: \"Analyst\",\n [SUBAGENT_ROLE.DESIGNER]: \"Designer\",\n [SUBAGENT_ROLE.FRONTEND_DEVELOPER]: \"Frontend\",\n [SUBAGENT_ROLE.DEVELOPER]: \"Developer\",\n [SUBAGENT_ROLE.QA]: \"QA\",\n [SUBAGENT_ROLE.ORCHESTRATOR]: \"Orchestrator\"\n};\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport type { SubagentRoleBindings } from \"@task-boards/api/projects/projects.types\";\n\nimport {\n isSubagentRoleActive,\n normalizeSubagentRoleBindings,\n type LegacySubagentRoleBindings\n} from \"./subagent-role-bindings.normalize\";\n\nexport function hasAnyActiveSubagentBindings(\n bindings: SubagentRoleBindings | LegacySubagentRoleBindings | Record<string, unknown>\n): boolean {\n const normalized = normalizeSubagentRoleBindings(bindings);\n\n return (Object.values(SUBAGENT_ROLE) as SubagentRole[]).some(role => isSubagentRoleActive(normalized, role));\n}\n", "import { BOARD_PRESET_CODE, type BoardPresetCode } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport type { SubagentRoleBindings } from \"@task-boards/api/projects/projects.types\";\n\nimport {\n isAgenticPhasesEnabled as isAgenticPhasesEnabledForProject,\n type AgenticPhasesProject\n} from \"../workflows/column-slug-mapping\";\n\nimport { hasAnyActiveSubagentBindings } from \"./subagent-role-bindings.util\";\nimport type { LegacySubagentRoleBindings } from \"./subagent-role-bindings.normalize\";\n\nexport type { AgenticPhasesProject };\n\nexport function isAgenticSdlcPreset(presetCode: BoardPresetCode): boolean {\n return presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC;\n}\n\nexport function isAgenticPhasesEnabled(project: AgenticPhasesProject): boolean {\n return isAgenticPhasesEnabledForProject(project);\n}\n\nexport function isAgentsUnconfigured(\n project: AgenticPhasesProject,\n bindings: SubagentRoleBindings | LegacySubagentRoleBindings | Record<string, unknown>\n): boolean {\n return isAgenticPhasesEnabled(project) && !hasAnyActiveSubagentBindings(bindings);\n}\n", "export type { SubagentRoleBindings } from \"./subagent-role.types\";\nexport type { SubagentRoleBinding } from \"@task-boards/api/projects/projects.types\";\nexport { DEFAULT_AGENTIC_SDLC_SUBAGENT_BINDINGS, SUBAGENT_ROLE_LABEL } from \"./subagent-role-labels\";\nexport {\n createSubagentRoleBinding,\n isSubagentRoleActive,\n normalizeSubagentRoleBindings,\n parseSubagentRoleBinding\n} from \"./subagent-role-bindings.normalize\";\nexport { hasAnyActiveSubagentBindings } from \"./subagent-role-bindings.util\";\nexport {\n isAgenticPhasesEnabled,\n isAgenticSdlcPreset,\n isAgentsUnconfigured,\n type AgenticPhasesProject\n} from \"./project-agents.util\";\nexport { resolveSubagentSlug } from \"./subagent-role.util\";\n", "/** Reserved IDE subagent slugs from the global/team catalog; not creatable per project. */\nexport const BUILTIN_IDE_SUBAGENT_SLUGS = [\n \"functional-analyst\",\n \"solution-architect-senior\",\n \"senior-web-developer\",\n \"senior-qa-engineer\",\n \"senior-frontend-react-developer\",\n \"senior-backend-nodejs-typescript\",\n \"product-manager-senior\",\n \"senior-product-designer\",\n \"security-review\"\n] as const;\n\nexport type BuiltinIdeSubagentSlug = (typeof BUILTIN_IDE_SUBAGENT_SLUGS)[number];\n", "export interface SubagentLlmInputValidationResult {\n valid: boolean;\n reason?: string;\n}\n\nconst INJECTION_PATTERNS: RegExp[] = [\n /ignore\\s+(?:all\\s+)?(?:previous|prior|above)\\s+instructions/i,\n /disregard\\s+(?:all\\s+)?(?:previous|prior|above)/i,\n /you\\s+are\\s+now/i,\n /\\bsystem\\s*:/i,\n /\\[(?:\\/)?INST\\]/i,\n /###\\s*instruction/i,\n /do\\s+not\\s+follow\\s+(?:the\\s+)?(?:above|previous)/i,\n /new\\s+instructions\\s*:/i,\n /override\\s+(?:all\\s+)?rules/i\n];\n\nfunction invalid(reason: string): SubagentLlmInputValidationResult {\n return { valid: false, reason };\n}\n\nfunction containsControlChars(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n\n if (\n code === 0 ||\n (code >= 1 && code <= 8) ||\n code === 11 ||\n code === 12 ||\n (code >= 14 && code <= 31) ||\n code === 127\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction findInjectionPattern(value: string): RegExp | undefined {\n return INJECTION_PATTERNS.find(pattern => pattern.test(value));\n}\n\nfunction validateField(value: string, label: string, maxLength: number): SubagentLlmInputValidationResult | null {\n if (containsControlChars(value)) {\n return invalid(`${label} must not contain control characters.`);\n }\n\n if (value.length > maxLength) {\n return invalid(`${label} must not exceed ${maxLength} characters.`);\n }\n\n const injectionPattern = findInjectionPattern(value);\n\n if (injectionPattern !== undefined) {\n return invalid(`${label} contains disallowed prompt-injection patterns.`);\n }\n\n return null;\n}\n\nexport function validateSubagentLlmInput(\n basePrompt: string,\n name: string,\n description: string,\n maxInputChars: number\n): SubagentLlmInputValidationResult {\n const nameError = validateField(name, \"Name\", maxInputChars);\n\n if (nameError !== null) {\n return nameError;\n }\n\n const descriptionError = validateField(description, \"Description\", maxInputChars);\n\n if (descriptionError !== null) {\n return descriptionError;\n }\n\n const basePromptError = validateField(basePrompt, \"Base prompt\", maxInputChars);\n\n if (basePromptError !== null) {\n return basePromptError;\n }\n\n return { valid: true };\n}\n", "export interface SubagentLlmValidationResult {\n valid: boolean;\n reason?: string;\n}\n\nconst MAX_BODY_CHARS = 32_768;\n\nconst REQUIRED_HEADINGS = [\"## When invoked\", \"## Project domain context\"] as const;\n\nconst DANGEROUS_URL_PATTERN = /(?:javascript|data|script)\\s*:|(?:<script\\b)/i;\n\nconst FRONTMATTER_PATTERN = /^\\s*---[\\s\\S]*?---/;\n\nconst MIN_REPEATED_LINE_LENGTH = 10;\n\nconst REPEATED_LINE_THRESHOLD = 5;\n\nconst MIN_REPEATED_WORD_LENGTH = 4;\n\nconst REPEATED_WORD_MIN_COUNT = 10;\n\nconst REPEATED_WORD_RATIO = 0.25;\n\nfunction invalid(reason: string): SubagentLlmValidationResult {\n return { valid: false, reason };\n}\n\nfunction hasSpamRepetition(body: string): boolean {\n const lines = body\n .split(\"\\n\")\n .map(line => line.trim())\n .filter(line => line.length >= MIN_REPEATED_LINE_LENGTH);\n const lineCounts = new Map<string, number>();\n\n for (const line of lines) {\n const count = (lineCounts.get(line) ?? 0) + 1;\n lineCounts.set(line, count);\n\n if (count >= REPEATED_LINE_THRESHOLD) {\n return true;\n }\n }\n\n const words = body\n .toLowerCase()\n .split(/[^a-z0-9]+/u)\n .filter(word => word.length >= MIN_REPEATED_WORD_LENGTH);\n\n if (words.length === 0) {\n return false;\n }\n\n const wordCounts = new Map<string, number>();\n\n for (const word of words) {\n const count = (wordCounts.get(word) ?? 0) + 1;\n wordCounts.set(word, count);\n\n if (count >= REPEATED_WORD_MIN_COUNT && count / words.length >= REPEATED_WORD_RATIO) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function validateSubagentLlmBodyMarkdown(body: string): SubagentLlmValidationResult {\n const trimmed = body.trim();\n\n if (trimmed.length === 0) {\n return invalid(\"Body must not be empty.\");\n }\n\n if (trimmed.length > MAX_BODY_CHARS) {\n return invalid(`Body must not exceed ${MAX_BODY_CHARS} characters.`);\n }\n\n if (FRONTMATTER_PATTERN.test(trimmed)) {\n return invalid(\"Body must not include YAML frontmatter.\");\n }\n\n for (const heading of REQUIRED_HEADINGS) {\n if (!trimmed.includes(heading)) {\n return invalid(`Body must include the \"${heading}\" section.`);\n }\n }\n\n if (DANGEROUS_URL_PATTERN.test(trimmed)) {\n return invalid(\"Body must not contain script, javascript, or data URLs.\");\n }\n\n if (hasSpamRepetition(trimmed)) {\n return invalid(\"Body contains excessive repeated content.\");\n }\n\n return { valid: true };\n}\n", "export { SUBAGENT_PREVIEW_MODE, type SubagentPreviewMode } from \"@task-boards/api\";\n", "const MAX_SUBAGENT_SLUG_LENGTH = 64;\n\nconst FALLBACK_SLUG = \"subagent\";\n\n/**\n * Derives a kebab-case slug from a display name (max 64 chars).\n */\nexport function nameToSubagentSlug(name: string): string {\n const normalized = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/-{2,}/g, \"-\");\n\n if (normalized.length === 0) {\n return FALLBACK_SLUG;\n }\n\n return normalized.slice(0, MAX_SUBAGENT_SLUG_LENGTH).replace(/-+$/g, \"\");\n}\n\n/**\n * Returns a unique slug by appending `-2`, `-3`, \u2026 when baseSlug collides with existingSlugs.\n */\nexport function resolveSlugCollision(baseSlug: string, existingSlugs: readonly string[]): string {\n const existing = new Set(existingSlugs);\n\n if (!existing.has(baseSlug)) {\n return baseSlug;\n }\n\n let suffix = 2;\n\n while (suffix < 10_000) {\n const candidate = truncateSlug(`${baseSlug}-${suffix}`);\n\n if (!existing.has(candidate)) {\n return candidate;\n }\n\n suffix += 1;\n }\n\n throw new Error(`Unable to resolve slug collision for \"${baseSlug}\"`);\n}\n\nfunction truncateSlug(slug: string): string {\n if (slug.length <= MAX_SUBAGENT_SLUG_LENGTH) {\n return slug;\n }\n\n return slug.slice(0, MAX_SUBAGENT_SLUG_LENGTH).replace(/-+$/g, \"\");\n}\n", "export interface BuildSubagentFileContentParams {\n slug: string;\n name: string;\n description: string;\n basePrompt: string;\n}\n\nexport interface BuildSubagentDefinitionParams {\n slug: string;\n name: string;\n description: string;\n basePrompt: string;\n}\n\nexport interface SubagentDefinitionBuildResult {\n bodyMarkdown: string;\n fileContent: string;\n}\n\n/**\n * Builds IDE-compatible subagent markdown body (without YAML frontmatter).\n */\nexport function buildSubagentBodyMarkdown(params: BuildSubagentDefinitionParams): string {\n const trimmedPrompt = params.basePrompt.trim();\n\n return [\n `You are **${params.name}** \u2014 a project-specific IDE subagent (${params.slug}).`,\n \"\",\n \"## When invoked\",\n \"\",\n \"1. Clarify the goal and success criteria before acting.\",\n \"2. Follow repository conventions and keep changes minimal.\",\n \"3. Validate external inputs and avoid leaking secrets.\",\n \"\",\n \"## Principles\",\n \"\",\n \"- Prefer strict TypeScript and explicit control flow.\",\n \"- Match existing module boundaries and naming in the codebase.\",\n \"- Surface blockers early instead of guessing requirements.\",\n \"\",\n \"## Project domain context\",\n \"\",\n trimmedPrompt\n ].join(\"\\n\");\n}\n\n/**\n * Builds full `.cursor/agents/<slug>.md` content with YAML frontmatter.\n */\nexport function buildSubagentFileContent(params: BuildSubagentFileContentParams): string {\n const bodyMarkdown = buildSubagentBodyMarkdown(params);\n\n return [\n \"---\",\n `name: ${params.slug}`,\n `description: ${escapeYamlScalar(params.description)}`,\n \"---\",\n \"\",\n bodyMarkdown\n ].join(\"\\n\");\n}\n\nexport interface BuildSubagentFileContentFromBodyParams {\n slug: string;\n description: string;\n bodyMarkdown: string;\n}\n\n/**\n * Builds full `.cursor/agents/<slug>.md` from persisted API fields (frontmatter + stored body).\n */\nexport function buildSubagentFileContentFromBody(params: BuildSubagentFileContentFromBodyParams): string {\n return [\n \"---\",\n `name: ${params.slug}`,\n `description: ${escapeYamlScalar(params.description)}`,\n \"---\",\n \"\",\n params.bodyMarkdown\n ].join(\"\\n\");\n}\n\n/**\n * Builds preview payload fields used by the project subagents API.\n */\nexport function buildSubagentDefinition(params: BuildSubagentDefinitionParams): SubagentDefinitionBuildResult {\n const bodyMarkdown = buildSubagentBodyMarkdown(params);\n const fileContent = buildSubagentFileContent(params);\n\n return { bodyMarkdown, fileContent };\n}\n\nfunction escapeYamlScalar(value: string): string {\n if (/[:#\\n]|^\\s|\\s$/.test(value)) {\n return `\"${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n }\n\n return value;\n}\n", "export { BUILTIN_IDE_SUBAGENT_SLUGS, type BuiltinIdeSubagentSlug } from \"./builtin-ide-subagents.const\";\nexport { validateSubagentLlmInput, type SubagentLlmInputValidationResult } from \"./subagent-llm-input.validator\";\nexport { validateSubagentLlmBodyMarkdown, type SubagentLlmValidationResult } from \"./subagent-llm-output.validator\";\nexport { SUBAGENT_PREVIEW_MODE, type SubagentPreviewMode } from \"./subagent-preview-mode.enum\";\nexport { nameToSubagentSlug, resolveSlugCollision } from \"./slug.util\";\nexport {\n buildSubagentBodyMarkdown,\n buildSubagentDefinition,\n buildSubagentFileContent,\n buildSubagentFileContentFromBody,\n type BuildSubagentDefinitionParams,\n type BuildSubagentFileContentFromBodyParams,\n type BuildSubagentFileContentParams,\n type SubagentDefinitionBuildResult\n} from \"./subagent-definition.builder\";\n", "/**\n * Foundation for multi-tenancy (ADR-001). Until tenant CRUD/switching exists, every\n * tenant-scoped row belongs to this single default tenant. The id is a fixed UUID v4 so\n * the backfill migration and runtime create-paths agree on the same value.\n */\nexport const DEFAULT_TENANT_ID = \"2f3b4c5d-6e7a-4b8c-9d0e-1f2a3b4c5d6e\";\n\nexport const DEFAULT_TENANT_NAME = \"Default Tenant\";\n", "export * from \"./tenancy.consts\";\n", "export const MCP_REDACTED = \"[REDACTED]\";\nexport const MCP_REDACTED_PATH = \"[REDACTED_PATH]\";\nexport const MCP_REDACTED_HOST = \"[REDACTED_HOST]\";\nexport const MCP_REDACTED_PORT = \"[REDACTED_PORT]\";\nexport const MCP_WORKSPACE_PLACEHOLDER = \"[workspace]\";\n\nconst SENSITIVE_OBJECT_KEY_PATTERN =\n /^(password|passwd|secret|clientsecret|client_secret|apikey|api_key|token|authorization|smtp_password|tokenpepper|token_pepper|privatekey|private_key)$/i;\n\nconst BLOCKED_ATTACHMENT_FILE_NAME_PATTERN =\n /^(?:\\.env(?:\\..*)?|secrets\\.ya?ml|config\\.ya?ml|.*\\.pem|.*\\.p12|.*\\.key|id_rsa(?:\\..*)?|credentials\\.json|\\.npmrc|docker-compose\\.ya?ml|compose\\.ya?ml)$/i;\n\nconst JWT_PATTERN = /eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/g;\nconst BEARER_PATTERN = /Bearer\\s+[A-Za-z0-9._~+/=-]+/gi;\nconst DB_URL_PATTERN = /\\b(?:postgres|postgresql|mysql|mongodb)(?:\\+srv)?:\\/\\/\\S+/gi;\nconst URL_CREDENTIALS_PATTERN = /:\\/\\/[^:]+:[^@\\s]+@/g;\nconst PRIVATE_IPV4_PATTERN =\n /\\b(?:10(?:\\.\\d{1,3}){3}|172\\.(?:1[6-9]|2\\d|3[01])(?:\\.\\d{1,3}){2}|192\\.168(?:\\.\\d{1,3}){2})\\b/g;\nconst REMOTE_HOST_PORT_PATTERN =\n /\\b(?!localhost\\b|127\\.0\\.0\\.1\\b)([a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*):(\\d{2,5})\\b/g;\nconst INLINE_SECRET_PATTERN =\n /\\b(password|secret|client[_-]?secret|api[_-]?key|token[_-]?pepper|smtp[_-]?password|private[_-]?key)\\s*[:=]\\s*['\"]?([^\\s'\"]+)/gi;\nconst PEM_BLOCK_PATTERN = /-----BEGIN[A-Z ]+-----[\\s\\S]*?-----END[A-Z ]+-----/g;\nconst DEPLOYMENT_PATH_PATTERN = /\\/(?:app|home|var\\/www|opt)(?:\\/[^\\s'\",\\])}]+)+/g;\nconst HTTPS_REMOTE_URL_PATTERN = /\\bhttps?:\\/\\/(?!localhost\\b|127\\.0\\.0\\.1\\b)[^\\s'\"]+/gi;\nconst ENV_ASSIGNMENT_PATTERN = /\\b(?:TASK_BOARDS|PRIVATE_NPM)[A-Z0-9_]*\\s*=\\s*['\"]?[^\\s'\"]+/gi;\nconst NPM_TOKEN_PATTERN = /NpmToken\\.[A-Za-z0-9._-]+/gi;\n\nexport function isBlockedMcpAttachmentFileName(fileName: string): boolean {\n const baseName = fileName.split(/[/\\\\]/).pop() ?? fileName;\n return BLOCKED_ATTACHMENT_FILE_NAME_PATTERN.test(baseName.trim());\n}\n\nexport function maskWorkspaceRoot(): string {\n return MCP_WORKSPACE_PLACEHOLDER;\n}\n\nexport function toRelativeWorkspacePath(workspaceRoot: string, absolutePath: string): string {\n const normalizedRoot = workspaceRoot.replace(/\\/$/, \"\");\n const normalizedPath = absolutePath.replace(/\\/$/, \"\");\n\n if (normalizedPath === normalizedRoot) {\n return \".\";\n }\n\n const prefix = `${normalizedRoot}/`;\n if (normalizedPath.startsWith(prefix)) {\n return normalizedPath.slice(prefix.length);\n }\n\n return MCP_REDACTED_PATH;\n}\n\nexport function redactSensitiveText(text: string): string {\n let result = text;\n\n result = result.replace(JWT_PATTERN, MCP_REDACTED);\n result = result.replace(BEARER_PATTERN, `Bearer ${MCP_REDACTED}`);\n result = result.replace(DB_URL_PATTERN, `${MCP_REDACTED}_DB_URL`);\n result = result.replace(URL_CREDENTIALS_PATTERN, `://${MCP_REDACTED}@`);\n result = result.replace(PRIVATE_IPV4_PATTERN, MCP_REDACTED_HOST);\n result = result.replace(REMOTE_HOST_PORT_PATTERN, `${MCP_REDACTED_HOST}:${MCP_REDACTED_PORT}`);\n result = result.replace(INLINE_SECRET_PATTERN, (_match, key: string) => `${key}: ${MCP_REDACTED}`);\n result = result.replace(PEM_BLOCK_PATTERN, MCP_REDACTED);\n result = result.replace(DEPLOYMENT_PATH_PATTERN, MCP_REDACTED_PATH);\n result = result.replace(HTTPS_REMOTE_URL_PATTERN, `${MCP_REDACTED_HOST}/...`);\n result = result.replace(ENV_ASSIGNMENT_PATTERN, `${MCP_REDACTED}_ENV`);\n result = result.replace(NPM_TOKEN_PATTERN, `NpmToken.${MCP_REDACTED}`);\n\n return result;\n}\n\nexport function redactSensitiveValueDeep<T>(value: T, workspaceRoot?: string): T {\n return redactSensitiveValueDeepInternal(value, undefined, workspaceRoot) as T;\n}\n\nfunction redactSensitiveValueDeepInternal(value: unknown, key: string | undefined, workspaceRoot?: string): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === \"string\") {\n if (key === \"workspaceRoot\") {\n return MCP_WORKSPACE_PLACEHOLDER;\n }\n\n if (key !== undefined && SENSITIVE_OBJECT_KEY_PATTERN.test(key)) {\n return MCP_REDACTED;\n }\n\n return redactSensitiveText(value);\n }\n\n if (Array.isArray(value)) {\n return value.map(item => redactSensitiveValueDeepInternal(item, undefined, workspaceRoot));\n }\n\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const redacted: Record<string, unknown> = {};\n\n for (const [entryKey, entryValue] of Object.entries(record)) {\n if (SENSITIVE_OBJECT_KEY_PATTERN.test(entryKey)) {\n redacted[entryKey] = entryValue === null ? null : MCP_REDACTED;\n continue;\n }\n\n if (entryKey === \"workspaceRoot\" && typeof entryValue === \"string\") {\n redacted[entryKey] = MCP_WORKSPACE_PLACEHOLDER;\n continue;\n }\n\n if (\n (entryKey === \"path\" || entryKey === \"stagingDir\" || entryKey === \"directory\") &&\n typeof entryValue === \"string\"\n ) {\n redacted[entryKey] =\n workspaceRoot !== undefined && workspaceRoot.trim() !== \"\"\n ? toRelativeWorkspacePath(workspaceRoot, entryValue)\n : MCP_REDACTED_PATH;\n continue;\n }\n\n redacted[entryKey] = redactSensitiveValueDeepInternal(entryValue, entryKey, workspaceRoot);\n }\n\n return redacted;\n }\n\n return value;\n}\n", "import {\n MCP_REDACTED,\n MCP_REDACTED_PATH,\n redactSensitiveText,\n redactSensitiveValueDeep,\n toRelativeWorkspacePath\n} from \"./mcp-sensitive-data.util\";\n\nexport interface SanitizeMcpToolResultOptions {\n workspaceRoot?: string;\n}\n\nconst PATH_FIELD_KEYS = new Set([\"path\", \"stagingDir\", \"directory\"]);\nconst OMIT_FIELD_KEYS = new Set([\"commitMessage\", \"sourcePrompt\"]);\n\nconst ECONNREFUSED_PATTERN = /\\bconnect ECONNREFUSED\\b[^\\n]*/gi;\nconst ABSOLUTE_PATH_IN_MESSAGE_PATTERN = /(?<=[\\s:(])(\\/[\\w@./-]+)/g;\nconst ENV_ASSIGNMENT_PATTERN = /\\b(?:TASK_BOARDS|PRIVATE_NPM)[A-Z0-9_]*\\s*=\\s*['\"]?[^\\s'\"]+/gi;\nconst NPM_TOKEN_PATTERN = /NpmToken\\.[A-Za-z0-9._-]+/gi;\n\nexport function sanitizeMcpErrorMessage(message: string): string {\n let result = redactSensitiveText(message);\n result = result.replace(ECONNREFUSED_PATTERN, \"Connection refused\");\n result = result.replace(ENV_ASSIGNMENT_PATTERN, \"[REDACTED_ENV]\");\n result = result.replace(NPM_TOKEN_PATTERN, `NpmToken.${MCP_REDACTED}`);\n result = result.replace(ABSOLUTE_PATH_IN_MESSAGE_PATTERN, MCP_REDACTED_PATH);\n return result;\n}\n\nexport function sanitizeMcpToolResult<T>(value: T, options?: SanitizeMcpToolResultOptions): T {\n try {\n const redacted = redactSensitiveValueDeep(value, options?.workspaceRoot);\n return applyMcpDomainRules(redacted, options?.workspaceRoot) as T;\n } catch {\n return value;\n }\n}\n\nfunction applyMcpDomainRules(value: unknown, workspaceRoot?: string): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(item => applyMcpDomainRules(item, workspaceRoot));\n }\n\n if (typeof value !== \"object\") {\n return value;\n }\n\n const record = value as Record<string, unknown>;\n const sanitized: Record<string, unknown> = {};\n\n for (const [key, entryValue] of Object.entries(record)) {\n if (OMIT_FIELD_KEYS.has(key)) {\n continue;\n }\n\n if (PATH_FIELD_KEYS.has(key) && typeof entryValue === \"string\") {\n sanitized[key] = redactPathField(entryValue, workspaceRoot);\n continue;\n }\n\n sanitized[key] = applyMcpDomainRules(entryValue, workspaceRoot);\n }\n\n return sanitized;\n}\n\nfunction redactPathField(pathValue: string, workspaceRoot?: string): string {\n const isAbsolutePath = pathValue.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(pathValue);\n\n if (isAbsolutePath && workspaceRoot !== undefined && workspaceRoot.trim() !== \"\") {\n return toRelativeWorkspacePath(workspaceRoot, pathValue);\n }\n\n if (isAbsolutePath) {\n return MCP_REDACTED_PATH;\n }\n\n return redactSensitiveText(pathValue);\n}\n", "export * from \"./mcp-sensitive-data.util\";\nexport * from \"./sanitize-mcp-tool-result.util\";\n", "export * from \"@task-boards/api\";\nexport * from \"./board-presets\";\nexport * from \"./subscriptions\";\nexport * from \"./internal\";\nexport * from \"./realtime/realtime.consts\";\nexport * from \"./realtime/realtime.events\";\nexport * from \"./realtime/realtime.types\";\nexport * from \"./work-items/work-items.display-key.util\";\nexport * from \"./git/story-branch.util\";\nexport * from \"./git/work-item-commit.util\";\nexport * from \"./workflows\";\nexport * from \"./subagent-role\";\nexport * from \"./subagent\";\nexport * from \"./tenancy\";\nexport * from \"./mcp-data-protection\";\n", "import { createRequire } from \"node:module\";\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { loadConfig } from \"./config.js\";\nimport { RestClient } from \"./rest-client.js\";\nimport { initToolRuntime } from \"./tool-runtime.js\";\nimport { registerTools } from \"./tools/index.js\";\n\nconst require = createRequire(import.meta.url);\nconst { version: packageVersion } = require(\"../package.json\") as { version: string };\n\nexport async function main(): Promise<void> {\n const config = loadConfig();\n initToolRuntime(config);\n const client = new RestClient(config.apiUrl, config.apiToken);\n\n const server = new McpServer({\n name: \"task-boards\",\n version: packageVersion\n });\n\n registerTools(server, client, config);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n", "import { API_V1_PREFIX } from \"@task-boards/api\";\n\nfunction resolveSanitizeResponses(): boolean {\n const raw = process.env.TASK_BOARDS_MCP_SANITIZE;\n if (raw === undefined || raw.trim() === \"\") {\n return true;\n }\n\n const normalized = raw.trim().toLowerCase();\n return normalized !== \"false\" && normalized !== \"0\" && normalized !== \"no\";\n}\n\nfunction resolveBlockSensitiveAttachments(): boolean {\n const raw = process.env.TASK_BOARDS_MCP_BLOCK_SENSITIVE_ATTACHMENTS;\n if (raw === undefined || raw.trim() === \"\") {\n return true;\n }\n\n const normalized = raw.trim().toLowerCase();\n return normalized !== \"false\" && normalized !== \"0\" && normalized !== \"no\";\n}\n\nexport interface McpServerConfig {\n apiUrl: string;\n apiToken: string | undefined;\n workspaceRoot: string | undefined;\n sanitizeResponses: boolean;\n blockSensitiveAttachments: boolean;\n}\n\nexport function loadConfig(): McpServerConfig {\n const apiUrl = process.env.TASK_BOARDS_API_URL ?? \"http://localhost:3000\";\n const apiToken = process.env.TASK_BOARDS_API_TOKEN;\n const workspaceRoot = process.env.WORKSPACE_ROOT;\n\n if (process.env.NODE_ENV === \"production\" && (apiToken === undefined || apiToken.trim() === \"\")) {\n console.error(\"WARNING: TASK_BOARDS_API_TOKEN is not set. MCP server cannot authenticate to the Task Boards API.\");\n }\n\n return {\n apiUrl: `${apiUrl.replace(/\\/$/, \"\")}${API_V1_PREFIX}`,\n apiToken,\n workspaceRoot: workspaceRoot !== undefined && workspaceRoot.trim() !== \"\" ? workspaceRoot : undefined,\n sanitizeResponses: resolveSanitizeResponses(),\n blockSensitiveAttachments: resolveBlockSensitiveAttachments()\n };\n}\n", "import axios, { type AxiosInstance, type AxiosRequestConfig, isAxiosError } from \"axios\";\nimport FormData from \"form-data\";\nimport { sanitizeMcpErrorMessage } from \"@task-boards/shared\";\n\nexport interface ApiErrorBody {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport class RestClientError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status?: number\n ) {\n super(message);\n this.name = \"RestClientError\";\n }\n}\n\nexport class RestClient {\n private readonly client: AxiosInstance;\n\n constructor(baseUrl: string, apiToken: string | undefined) {\n this.client = axios.create({\n baseURL: baseUrl,\n headers: apiToken !== undefined && apiToken.length > 0 ? { Authorization: `Bearer ${apiToken}` } : {}\n });\n }\n\n async get<T>(path: string, params?: Record<string, string | undefined>): Promise<T> {\n const config: AxiosRequestConfig = {};\n if (params !== undefined) {\n config.params = Object.fromEntries(\n Object.entries(params).filter((entry): entry is [string, string] => entry[1] !== undefined)\n );\n }\n return this.request<T>({ method: \"GET\", url: path, ...config });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: \"POST\", url: path, data: body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: \"PATCH\", url: path, data: body });\n }\n\n async delete(path: string, body?: unknown): Promise<void> {\n await this.request<void>({ method: \"DELETE\", url: path, data: body });\n }\n\n async uploadMultipart<T>(\n path: string,\n fieldName: string,\n file: { buffer: Buffer; fileName: string; mimeType: string }\n ): Promise<T> {\n const form = new FormData();\n form.append(fieldName, file.buffer, {\n filename: file.fileName,\n contentType: file.mimeType\n });\n\n return this.request<T>({\n method: \"POST\",\n url: path,\n data: form,\n headers: form.getHeaders()\n });\n }\n\n async downloadBinary(path: string): Promise<{ data: Buffer; contentType: string }> {\n try {\n const response = await this.client.request<ArrayBuffer>({\n method: \"GET\",\n url: path,\n responseType: \"arraybuffer\"\n });\n const rawContentType: unknown = response.headers[\"content-type\"];\n const contentType = typeof rawContentType === \"string\" ? rawContentType : \"application/octet-stream\";\n return {\n data: Buffer.from(response.data),\n contentType\n };\n } catch (error: unknown) {\n if (isAxiosError(error)) {\n const body: unknown = error.response?.data;\n if (this.isApiErrorBody(body)) {\n throw new RestClientError(body.code, body.message, error.response?.status);\n }\n throw new RestClientError(\"HTTP_ERROR\", this.sanitizeHttpErrorMessage(error.message), error.response?.status);\n }\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new RestClientError(\"INTERNAL_ERROR\", sanitizeMcpErrorMessage(message));\n }\n }\n\n private async request<T>(config: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.request<T>(config);\n return response.data;\n } catch (error: unknown) {\n if (isAxiosError(error)) {\n const body: unknown = error.response?.data;\n if (this.isApiErrorBody(body)) {\n throw new RestClientError(body.code, body.message, error.response?.status);\n }\n throw new RestClientError(\"HTTP_ERROR\", this.sanitizeHttpErrorMessage(error.message), error.response?.status);\n }\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new RestClientError(\"INTERNAL_ERROR\", sanitizeMcpErrorMessage(message));\n }\n }\n\n private sanitizeHttpErrorMessage(message: string): string {\n const trimmed = message.trim();\n if (trimmed.length === 0) {\n return \"HTTP request failed\";\n }\n\n return sanitizeMcpErrorMessage(trimmed);\n }\n\n private isApiErrorBody(value: unknown): value is ApiErrorBody {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"code\" in value &&\n \"message\" in value &&\n typeof value.code === \"string\" &&\n typeof value.message === \"string\"\n );\n }\n}\n", "import type { McpServerConfig } from \"./config.js\";\n\nlet serverConfig: McpServerConfig | null = null;\n\nexport function initToolRuntime(config: McpServerConfig): void {\n serverConfig = config;\n}\n\nexport function getServerConfig(): McpServerConfig | null {\n return serverConfig;\n}\n\nexport function shouldSanitizeResponses(): boolean {\n if (serverConfig === null) {\n return true;\n }\n\n return serverConfig.sanitizeResponses !== false;\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { AGENT_RUNS_ROUTES } from \"@task-boards/api/agent-runs/agent-runs.api\";\nimport type {\n AgentRunListResponse,\n AgentRunResponse,\n CompleteAgentRunRequest,\n CompleteAgentRunResponse,\n SetAgentRunAttentionRequest\n} from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_OUTCOME } from \"@task-boards/api/enums/agent-run-outcome.enum\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { enrichPollResult } from \"./orchestrator-hints.js\";\nimport { runTool } from \"./tool-utils.js\";\nimport { pollAgentRuns } from \"./wait-for-agent-runs.js\";\n\nconst agentRunStatusValues = Object.values(AGENT_RUN_STATUS) as [string, ...string[]];\nconst agentRunOutcomeValues = Object.values(AGENT_RUN_OUTCOME) as [string, ...string[]];\n\nconst AGENTIC_SDLC_COLUMNS_SUMMARY =\n \"AGENTIC_SDLC has 7 columns: backlog, in-analysis (PRODUCT\u2192ANALYST\u2192ARCHITECT handoffs), in-development (DESIGNER optional, then parallel FRONTEND_DEVELOPER+DEVELOPER), in-qa, in-awaiting, done, released.\";\n\nconst COMPLETE_AGENT_RUN_OUTCOME_SUMMARY =\n \"Prerequisite: STORY assignee must be \u0410\u0433\u0435\u043D\u0442 \u0418\u0418 (SERVICE user) \u2014 otherwise no agent_run is enqueued or claimed. in-analysis: PRODUCT/ANALYST DEFAULT \u2192 HANDOFF next phase (skip unbound roles); ANALYST SKIP_DESIGN \u2192 in-development; ARCHITECT DEFAULT \u2192 in-development (set workItemPatch.designerRequired). in-development: DESIGNER DEFAULT \u2192 DEVELOPMENT; dev role DEFAULT removes role from pendingDevRoles, moves to in-qa when empty; SKIP_DESIGN skips DESIGNER. in-qa: DEFAULT \u2192 done; HAS_BUGS \u2192 in-development (re-init pendingDevRoles). NEEDS_CLARIFICATION \u2192 in-awaiting. FAILED \u2192 no move. Claim priority: in-development > in-qa > in-analysis (SERVICE-assigned stories only block analysis).\";\n\nexport function registerAgentRunTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_agent_runs\",\n {\n description:\n \"List agent runs for a project (default status PENDING). Prefer wait_for_agent_runs for orchestrator long-polling.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID (required)\"),\n status: z.enum(agentRunStatusValues).optional().describe(\"Filter by agent run status\")\n }\n },\n async ({ status, projectId }) =>\n runTool(async () => {\n const effectiveStatus = status ?? AGENT_RUN_STATUS.PENDING;\n return client.get<AgentRunListResponse>(AGENT_RUNS_ROUTES.listAgentRuns(), {\n status: effectiveStatus,\n projectId\n });\n })\n );\n\n server.registerTool(\n \"wait_for_agent_runs\",\n {\n description:\n \"Long-poll agent runs for a project: atomically claims PENDING runs (POST /agent-runs/claim). On empty claim, immediately lists inflight DISPATCHED/ACKNOWLEDGED runs (GET activeOnly) for orphan recovery before sleeping. Returns items (newly claimed), inflightRuns (resume candidates), and orchestrator hints. First claim is immediate; subsequent polls sleep pollInterval seconds only when both claim and inflight are empty.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n timeout: z.number().int().min(1).max(300).default(120).describe(\"Maximum wait in seconds (1\u2013300, default 120)\"),\n pollInterval: z\n .number()\n .int()\n .min(1)\n .max(60)\n .default(2)\n .describe(\"Seconds between polls (1\u201360, default 2); must not exceed timeout\"),\n limit: z.number().int().min(1).max(10).default(1).describe(\"Max runs to claim per poll (1\u201310, default 1)\")\n }\n },\n async ({ projectId, timeout, pollInterval, limit }) =>\n runTool(async () => {\n const pollResult = await pollAgentRuns(client, {\n projectId,\n timeoutMs: timeout * 1000,\n pollIntervalMs: pollInterval * 1000,\n limit\n });\n return enrichPollResult(pollResult.items, pollResult.inflightRuns, pollResult.timedOut);\n })\n );\n\n server.registerTool(\n \"ack_agent_run\",\n {\n description:\n \"Acknowledge agent run delivery after Task subagent has been dispatched. Requires status DISPATCHED (DISPATCHED \u2192 ACKNOWLEDGED).\",\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\"),\n note: z.string().nullable().optional().describe(\"Optional acknowledgment note\")\n }\n },\n async ({ agentRunId, note }) =>\n runTool(async () => {\n const body = note !== undefined ? { note } : undefined;\n return client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.acknowledgeAgentRun(agentRunId), body);\n })\n );\n\n server.registerTool(\n \"report_agent_attention\",\n {\n description:\n \"Signal that the in-flight subagent needs human attention while the run is ACKNOWLEDGED. Sets requiresAttention on the agent run for orchestrator/UI visibility.\",\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\"),\n message: z.string().min(1).describe(\"Why human attention is needed\")\n }\n },\n async ({ agentRunId, message }) =>\n runTool(async () => {\n const body: SetAgentRunAttentionRequest = {\n requiresAttention: true,\n attentionMessage: message\n };\n return client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.setAgentRunAttention(agentRunId), body);\n })\n );\n\n server.registerTool(\n \"clear_agent_attention\",\n {\n description:\n \"Clear the human-attention flag after the blocker is resolved. Requires the run to still be ACKNOWLEDGED.\",\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\")\n }\n },\n async ({ agentRunId }) =>\n runTool(async () => {\n const body: SetAgentRunAttentionRequest = {\n requiresAttention: false\n };\n return client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.setAgentRunAttention(agentRunId), body);\n })\n );\n\n server.registerTool(\n \"complete_agent_run\",\n {\n description: `Complete agent run: apply AGENTIC_SDLC workflow transition and optional work item patch. ${AGENTIC_SDLC_COLUMNS_SUMMARY} Outcomes: ${COMPLETE_AGENT_RUN_OUTCOME_SUMMARY}`,\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\"),\n outcome: z\n .enum(agentRunOutcomeValues)\n .optional()\n .describe(\n `Completion outcome (DEFAULT, SKIP_DESIGN, HAS_BUGS, NEEDS_CLARIFICATION, FAILED). ${COMPLETE_AGENT_RUN_OUTCOME_SUMMARY}`\n ),\n note: z.string().nullable().optional().describe(\"Optional completion note\"),\n workItemPatch: z\n .object({\n description: z.string().nullable().optional().describe(\"Updated work item description\"),\n acceptanceCriteria: z.string().nullable().optional().describe(\"Updated acceptance criteria\"),\n designerRequired: z\n .boolean()\n .optional()\n .describe(\"Architect only: whether DESIGNER phase runs before development\")\n })\n .nullable()\n .optional()\n .describe(\"Optional work item field updates\")\n }\n },\n async ({ agentRunId, outcome, note, workItemPatch }) =>\n runTool(async () => {\n const body: CompleteAgentRunRequest = {};\n if (outcome !== undefined) {\n body.outcome = outcome as CompleteAgentRunRequest[\"outcome\"];\n }\n if (note !== undefined) {\n body.note = note;\n }\n if (workItemPatch !== undefined && workItemPatch !== null) {\n body.workItemPatch = workItemPatch;\n }\n const hasBody =\n outcome !== undefined || note !== undefined || (workItemPatch !== undefined && workItemPatch !== null);\n return client.post<CompleteAgentRunResponse>(\n AGENT_RUNS_ROUTES.completeAgentRun(agentRunId),\n hasBody ? body : undefined\n );\n })\n );\n}\n", "import type { AgentRunResponse } from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\nimport { SUBAGENT_ROLE } from \"@task-boards/api/enums/subagent-role.enum\";\n\nimport {\n ATTENTION_MESSAGE_TEMPLATES,\n buildAttentionGuidance,\n deriveOrchestratorRunPhase,\n type AttentionMessageCategory,\n type OrchestratorRunPhase\n} from \"./orchestrator-attention.util.js\";\n\nexport type {\n AttentionMessageCategory,\n AttentionMessageTemplate,\n AttentionGuidance,\n OrchestratorRunPhase\n} from \"./orchestrator-attention.util.js\";\nexport {\n ATTENTION_MESSAGE_CATEGORY,\n ATTENTION_MESSAGE_TEMPLATES,\n buildAttentionGuidance,\n deriveOrchestratorRunPhase,\n formatAttentionMessage,\n parseAttentionMessageCategory\n} from \"./orchestrator-attention.util.js\";\n\nexport type PollResultSource = \"claimed\" | \"inflight\" | \"idle\";\n\nexport interface OrchestratorSleeperPolicy {\n /** Exactly one blocking poll per workspace/project at a time. */\n singleBlockingPoll: true;\n /** Do not invoke run_orchestrator_once / wait_for_agent_runs in parallel. */\n noParallelPoll: true;\n /** After timedOut, schedule at most one follow-up automation wake. */\n noDuplicateWake: true;\n /** Human-readable rationale for automation authors. */\n guidance: string;\n}\n\nexport interface OrchestratorInflightSummary {\n dispatchedCount: number;\n acknowledgedCount: number;\n requiresAttentionCount: number;\n agentRunIds: string[];\n}\n\nexport interface ProcessRunAttentionHint {\n phase: OrchestratorRunPhase;\n requiresAttention: boolean;\n message: string | null;\n detectedCategory: AttentionMessageCategory | null;\n /** One line: use report_agent_attention; replaces prior message on same ACK run */\n reportGuidance: string;\n /** Present when requiresAttention === true */\n clearGuidance: string | null;\n /** Keys into ATTENTION_MESSAGE_TEMPLATES for orchestrator copy-paste */\n templateCategories: AttentionMessageCategory[];\n}\n\nexport interface ProcessRunHint {\n agentRunId: string;\n workItemId: string;\n phase: OrchestratorRunPhase;\n /** \"claimed\" = fresh PENDING\u2192DISPATCHED; \"inflight\" = list recovery. */\n source: \"claimed\" | \"inflight\";\n steps: string[];\n attention?: ProcessRunAttentionHint;\n}\n\nexport interface OrchestratorAttentionSummary {\n blockedRunCount: number;\n blockedAgentRunIds: string[];\n /** true when any run has requiresAttention */\n resolveBeforeNewDispatch: boolean;\n}\n\nexport interface OrchestratorRunLifecycleDoc {\n phases: OrchestratorRunPhase[];\n terminalPhase: \"complete\";\n ideAttentionVsWorkflowAwaiting: string;\n}\n\nexport interface OrchestratorHints {\n phase: \"idle\" | \"processing\";\n pollResultSource: PollResultSource;\n sleeperPolicy: OrchestratorSleeperPolicy;\n nextSteps: string[];\n inflightSummary?: OrchestratorInflightSummary;\n processRuns?: ProcessRunHint[];\n attentionSummary?: OrchestratorAttentionSummary;\n runLifecycle?: OrchestratorRunLifecycleDoc;\n}\n\nconst SLEEPER_POLICY: OrchestratorSleeperPolicy = {\n singleBlockingPoll: true,\n noParallelPoll: true,\n noDuplicateWake: true,\n guidance:\n \"Run exactly one blocking poll (run_orchestrator_once or wait_for_agent_runs) per workspace at a time; do not overlap polls or stack duplicate automation wakes.\"\n};\n\nconst IDLE_INFLIGHT_CHECK_STEP = \"Checked inflight runs (DISPATCHED/ACKNOWLEDGED); none found \u2014 true idle.\";\n\nconst IDLE_NO_DUPLICATE_WAKE_STEP =\n \"Schedule at most one follow-up automation wake; do not stack duplicate sleepers while a poll is in flight.\";\n\nconst PROCESSING_NO_PARALLEL_POLL_STEP = \"Do not start another poll until this batch finishes.\";\n\nconst INFLIGHT_DISPATCHED_RECOVERY_STEP =\n \"Orphan DISPATCHED \u2014 resume Task+ack; avoid duplicate Task if subagent already running in this session\";\n\nconst IDLE_TIMEOUT_DO_NOT_CLEAR_ATTENTION =\n \"Do not clear_agent_attention on timeout; badge remains until human resolves in IDE\";\n\nconst IDLE_TIMEOUT_NEXT_STEPS: string[] = [\n \"Call sync_git_releases(projectId) to sync work-item commits\",\n IDLE_TIMEOUT_DO_NOT_CLEAR_ATTENTION,\n \"Call wait_for_agent_runs again (or run_orchestrator_once) to continue monitoring\"\n];\n\nconst IDE_ATTENTION_NOT_IN_AWAITING =\n \"IDE attention is not in-awaiting; do not move column; replace attention message on re-report\";\n\nconst PROCESSING_NEXT_STEPS: string[] = [\n \"Call sync_project_subagents(projectId) before Task dispatch when the project uses custom subagent slugs\",\n \"Agent runs only for STORY items assigned to \u0410\u0433\u0435\u043D\u0442 \u0418\u0418 (SERVICE user); assign via update_work_item before moving to agent columns\",\n \"When a subagent is blocked, call report_agent_attention(agentRunId, message); clear with clear_agent_attention after resolution\",\n \"After processing all runs: local git commit with work-item:{uuid} tag (always; no push on master/main)\",\n \"On feature branch (not master/main): git push origin HEAD then sync_git_releases(projectId)\",\n \"Parallel Task runs OK for same workItemId when agentRole differs (e.g. FRONTEND_DEVELOPER + DEVELOPER)\",\n \"Claim priority: in-development > in-qa > in-analysis; in-analysis blocked while SERVICE-assigned stories exist in dev/qa\",\n \"Call run_orchestrator_once or wait_for_agent_runs to continue monitoring\"\n];\n\nconst ATTENTION_PROCESSING_NEXT_STEPS: string[] = [\n \"Resolve requiresAttention runs before dispatching new Task subagents\",\n IDE_ATTENTION_NOT_IN_AWAITING,\n \"Call clear_agent_attention(agentRunId) after each blocker is resolved\"\n];\n\nconst RUN_LIFECYCLE_DOC: OrchestratorRunLifecycleDoc = {\n phases: [\"dispatched\", \"acknowledged\", \"awaiting_ide_approval\", \"ready_to_complete\"],\n terminalPhase: \"complete\",\n ideAttentionVsWorkflowAwaiting:\n \"IDE attention (report_agent_attention on ACKNOWLEDGED runs) is not in-awaiting \u2014 do not move the story column for shell/git/network/MCP/Smart Mode approvals. Use complete_agent_run(NEEDS_CLARIFICATION) and in-awaiting only for workflow clarifications.\"\n};\n\nfunction buildTaskStep(run: AgentRunResponse): string {\n const subagent = run.payload.suggestedSubagentType ?? \"subagent\";\n return `Task(subagent_type=${subagent}, prompt=payload.contextSummary)`;\n}\n\nfunction buildCompleteStep(run: AgentRunResponse): string {\n if (run.agentRole === SUBAGENT_ROLE.ARCHITECT) {\n return \"complete_agent_run after work; architect may set workItemPatch.designerRequired (boolean, default false)\";\n }\n\n return \"complete_agent_run after work\";\n}\n\nfunction buildReportAttentionStep(run: AgentRunResponse): string {\n return `report_agent_attention(${run.id}, message) if blocked awaiting human input \u2014 ${ATTENTION_MESSAGE_TEMPLATES.shell.messagePattern.replace(\"{detail}\", \"<detail>\")}; replaces prior message on re-report`;\n}\n\nfunction buildProcessRunAttentionHint(run: AgentRunResponse): ProcessRunAttentionHint {\n const guidance = buildAttentionGuidance(run);\n\n return {\n phase: guidance.phase,\n requiresAttention: run.requiresAttention,\n message: run.attentionMessage,\n detectedCategory: guidance.detectedCategory,\n reportGuidance: `report_agent_attention(${run.id}, message) using formatAttentionMessage(category, detail); replaces prior message on same ACK run`,\n clearGuidance: guidance.clearStep,\n templateCategories: guidance.templateExamples\n };\n}\n\nfunction buildDispatchedProcessRunSteps(run: AgentRunResponse): string[] {\n return [\n \"sync_project_subagents(projectId) when payload.suggestedSubagentType is a project custom slug\",\n `list_work_item_attachments(${run.workItemId})`,\n \"download_work_item_attachments if needed\",\n buildTaskStep(run),\n `ack_agent_run(${run.id})`,\n buildReportAttentionStep(run),\n `clear_agent_attention(${run.id}) after human resolves in IDE`,\n buildCompleteStep(run),\n \"git commit with work-item tag (local; push only on feature branch)\"\n ];\n}\n\nfunction buildAwaitingIdeApprovalProcessRunSteps(run: AgentRunResponse): string[] {\n return [\n `clear_agent_attention(${run.id}) after resolving: ${run.attentionMessage ?? \"attention flag\"}`,\n buildCompleteStep(run),\n \"git commit with work-item tag (local; push only on feature branch)\"\n ];\n}\n\nfunction buildAcknowledgedProcessRunSteps(run: AgentRunResponse): string[] {\n return [\n \"Resume subagent work (Task may already be running in this session)\",\n buildReportAttentionStep(run),\n `clear_agent_attention(${run.id}) after human resolves in IDE`,\n buildCompleteStep(run),\n \"git commit with work-item tag (local; push only on feature branch)\"\n ];\n}\n\nfunction buildProcessRunHint(run: AgentRunResponse, source: \"claimed\" | \"inflight\"): ProcessRunHint {\n const phase = deriveOrchestratorRunPhase(run);\n\n if (phase === \"awaiting_ide_approval\") {\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps: buildAwaitingIdeApprovalProcessRunSteps(run),\n attention: buildProcessRunAttentionHint(run)\n };\n }\n\n if (phase === \"acknowledged\") {\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps: buildAcknowledgedProcessRunSteps(run)\n };\n }\n\n const steps = buildDispatchedProcessRunSteps(run);\n if (source === \"inflight\") {\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps: [INFLIGHT_DISPATCHED_RECOVERY_STEP, ...steps]\n };\n }\n\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps\n };\n}\n\nfunction buildProcessRuns(items: AgentRunResponse[], inflightRuns: AgentRunResponse[]): ProcessRunHint[] {\n const hints: ProcessRunHint[] = [];\n\n for (const run of items) {\n if (run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"claimed\"));\n }\n }\n\n for (const run of inflightRuns) {\n if (run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"inflight\"));\n }\n }\n\n for (const run of inflightRuns) {\n if (!run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"inflight\"));\n }\n }\n\n for (const run of items) {\n if (!run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"claimed\"));\n }\n }\n\n return hints;\n}\n\nfunction buildAttentionSummary(runs: AgentRunResponse[]): OrchestratorAttentionSummary {\n const blockedRuns = runs.filter(run => run.requiresAttention);\n\n return {\n blockedRunCount: blockedRuns.length,\n blockedAgentRunIds: blockedRuns.map(run => run.id),\n resolveBeforeNewDispatch: blockedRuns.length > 0\n };\n}\n\nfunction buildInflightSummary(inflightRuns: AgentRunResponse[]): OrchestratorInflightSummary | undefined {\n if (inflightRuns.length === 0) {\n return undefined;\n }\n\n return {\n dispatchedCount: inflightRuns.filter(run => run.status === AGENT_RUN_STATUS.DISPATCHED).length,\n acknowledgedCount: inflightRuns.filter(run => run.status === AGENT_RUN_STATUS.ACKNOWLEDGED).length,\n requiresAttentionCount: inflightRuns.filter(run => run.requiresAttention).length,\n agentRunIds: inflightRuns.map(run => run.id)\n };\n}\n\nfunction derivePollResultSource(items: AgentRunResponse[], inflightRuns: AgentRunResponse[]): PollResultSource {\n if (items.length > 0) {\n return \"claimed\";\n }\n\n if (inflightRuns.length > 0) {\n return \"inflight\";\n }\n\n return \"idle\";\n}\n\nexport function buildOrchestratorHints(\n items: AgentRunResponse[],\n inflightRuns: AgentRunResponse[],\n timedOut: boolean\n): OrchestratorHints {\n const pollResultSource = derivePollResultSource(items, inflightRuns);\n const allRuns = [...items, ...inflightRuns];\n\n if (timedOut) {\n return {\n phase: \"idle\",\n pollResultSource,\n sleeperPolicy: SLEEPER_POLICY,\n nextSteps: [IDLE_INFLIGHT_CHECK_STEP, ...IDLE_TIMEOUT_NEXT_STEPS, IDLE_NO_DUPLICATE_WAKE_STEP]\n };\n }\n\n if (allRuns.length === 0) {\n return {\n phase: \"idle\",\n pollResultSource,\n sleeperPolicy: SLEEPER_POLICY,\n nextSteps: [IDLE_INFLIGHT_CHECK_STEP, ...IDLE_TIMEOUT_NEXT_STEPS, IDLE_NO_DUPLICATE_WAKE_STEP]\n };\n }\n\n const hasAttentionRuns = allRuns.some(run => run.requiresAttention);\n\n return {\n phase: \"processing\",\n pollResultSource,\n sleeperPolicy: SLEEPER_POLICY,\n inflightSummary: buildInflightSummary(inflightRuns),\n processRuns: buildProcessRuns(items, inflightRuns),\n attentionSummary: buildAttentionSummary(allRuns),\n runLifecycle: RUN_LIFECYCLE_DOC,\n nextSteps: hasAttentionRuns\n ? [PROCESSING_NO_PARALLEL_POLL_STEP, ...ATTENTION_PROCESSING_NEXT_STEPS, ...PROCESSING_NEXT_STEPS]\n : [PROCESSING_NO_PARALLEL_POLL_STEP, ...PROCESSING_NEXT_STEPS]\n };\n}\n\nexport function enrichPollResult(\n items: AgentRunResponse[],\n inflightRuns: AgentRunResponse[],\n timedOut: boolean\n): {\n items: AgentRunResponse[];\n inflightRuns: AgentRunResponse[];\n timedOut: boolean;\n orchestrator: OrchestratorHints;\n} {\n return {\n items,\n inflightRuns,\n timedOut,\n orchestrator: buildOrchestratorHints(items, inflightRuns, timedOut)\n };\n}\n", "import type { AgentRunResponse } from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\n\nexport const ATTENTION_MESSAGE_CATEGORY = {\n SHELL: \"shell\",\n GIT: \"git\",\n NETWORK: \"network\",\n SMART_MODE: \"smart-mode\",\n MCP: \"mcp\",\n FILE: \"file\",\n OTHER: \"other\"\n} as const;\n\nexport type AttentionMessageCategory = (typeof ATTENTION_MESSAGE_CATEGORY)[keyof typeof ATTENTION_MESSAGE_CATEGORY];\n\nexport type OrchestratorRunPhase = \"dispatched\" | \"acknowledged\" | \"awaiting_ide_approval\" | \"ready_to_complete\";\n\nexport interface AttentionMessageTemplate {\n category: AttentionMessageCategory;\n label: string;\n /** Human-readable pattern; `{detail}` placeholder */\n messagePattern: string;\n example: string;\n}\n\nexport interface AttentionGuidance {\n phase: OrchestratorRunPhase;\n reportStep: string | null;\n clearStep: string | null;\n detectedCategory: AttentionMessageCategory | null;\n templateExamples: AttentionMessageCategory[];\n}\n\nconst ATTENTION_MESSAGE_PREFIX_PATTERN = /^\\[([^\\]]+)\\]\\s*/;\n\nexport const ATTENTION_MESSAGE_TEMPLATES: Record<AttentionMessageCategory, AttentionMessageTemplate> = {\n [ATTENTION_MESSAGE_CATEGORY.SHELL]: {\n category: ATTENTION_MESSAGE_CATEGORY.SHELL,\n label: \"Shell command approval\",\n messagePattern: \"[shell] Approve shell command: {detail}\",\n example: \"[shell] Approve npm install --force in repo root\"\n },\n [ATTENTION_MESSAGE_CATEGORY.GIT]: {\n category: ATTENTION_MESSAGE_CATEGORY.GIT,\n label: \"Git operation approval\",\n messagePattern: \"[git] Approve git operation: {detail}\",\n example: \"[git] Approve git push origin feature/tb-107\"\n },\n [ATTENTION_MESSAGE_CATEGORY.NETWORK]: {\n category: ATTENTION_MESSAGE_CATEGORY.NETWORK,\n label: \"Network access approval\",\n messagePattern: \"[network] Approve network access: {detail}\",\n example: \"[network] Approve fetch to registry.npmjs.org\"\n },\n [ATTENTION_MESSAGE_CATEGORY.SMART_MODE]: {\n category: ATTENTION_MESSAGE_CATEGORY.SMART_MODE,\n label: \"Smart Mode approval\",\n messagePattern: \"[smart-mode] Approve Smart Mode: {detail}\",\n example: \"[smart-mode] Approve blocked npm ci with elevated permissions\"\n },\n [ATTENTION_MESSAGE_CATEGORY.MCP]: {\n category: ATTENTION_MESSAGE_CATEGORY.MCP,\n label: \"MCP / API action approval\",\n messagePattern: \"[mcp] Approve MCP / API action: {detail}\",\n example: \"[mcp] Approve TASK_BOARDS_API_TOKEN rotation test call\"\n },\n [ATTENTION_MESSAGE_CATEGORY.FILE]: {\n category: ATTENTION_MESSAGE_CATEGORY.FILE,\n label: \"Out-of-scope file change approval\",\n messagePattern: \"[file] Approve file change outside scope: {detail}\",\n example: \"[file] Approve edit to packages/backend/config.yaml\"\n },\n [ATTENTION_MESSAGE_CATEGORY.OTHER]: {\n category: ATTENTION_MESSAGE_CATEGORY.OTHER,\n label: \"Other human input\",\n messagePattern: \"[other] Human input required: {detail}\",\n example: \"[other] Provide staging DB credentials\"\n }\n};\n\nconst ALL_TEMPLATE_CATEGORIES: AttentionMessageCategory[] = Object.values(ATTENTION_MESSAGE_CATEGORY);\n\nfunction isAttentionMessageCategory(value: string): value is AttentionMessageCategory {\n return ALL_TEMPLATE_CATEGORIES.includes(value as AttentionMessageCategory);\n}\n\nexport function deriveOrchestratorRunPhase(run: AgentRunResponse): OrchestratorRunPhase {\n if (run.requiresAttention) {\n return \"awaiting_ide_approval\";\n }\n\n if (run.status === AGENT_RUN_STATUS.DISPATCHED) {\n return \"dispatched\";\n }\n\n if (run.status === AGENT_RUN_STATUS.ACKNOWLEDGED) {\n return \"acknowledged\";\n }\n\n if (run.acknowledgedAt !== null) {\n return \"ready_to_complete\";\n }\n\n return \"dispatched\";\n}\n\nexport function parseAttentionMessageCategory(message: string): AttentionMessageCategory {\n const match = ATTENTION_MESSAGE_PREFIX_PATTERN.exec(message);\n\n if (match === null) {\n return ATTENTION_MESSAGE_CATEGORY.OTHER;\n }\n\n const rawCategory = match[1].toLowerCase();\n\n if (isAttentionMessageCategory(rawCategory)) {\n return rawCategory;\n }\n\n return ATTENTION_MESSAGE_CATEGORY.OTHER;\n}\n\nexport function formatAttentionMessage(category: AttentionMessageCategory, detail: string): string {\n return `[${category}] ${detail.trim()}`;\n}\n\nexport function buildAttentionGuidance(run: AgentRunResponse): AttentionGuidance {\n const phase = deriveOrchestratorRunPhase(run);\n const detectedCategory = run.attentionMessage !== null ? parseAttentionMessageCategory(run.attentionMessage) : null;\n\n const reportStep =\n phase === \"awaiting_ide_approval\"\n ? null\n : `report_agent_attention(${run.id}, message) \u2014 use formatAttentionMessage(category, detail); replaces prior message on same ACK run`;\n\n const clearStep = run.requiresAttention\n ? `clear_agent_attention(${run.id}) after resolving: ${run.attentionMessage ?? \"attention flag\"}`\n : null;\n\n return {\n phase,\n reportStep,\n clearStep,\n detectedCategory,\n templateExamples: ALL_TEMPLATE_CATEGORIES\n };\n}\n", "import type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { sanitizeMcpErrorMessage, sanitizeMcpToolResult } from \"@task-boards/shared\";\n\nimport { RestClientError } from \"../rest-client.js\";\nimport { shouldSanitizeResponses } from \"../tool-runtime.js\";\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\nexport interface RunToolOptions {\n workspaceRoot?: string;\n}\n\nexport function jsonResult(data: unknown): CallToolResult {\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }]\n };\n}\n\nexport function toolError(code: string, message: string): CallToolResult {\n const sanitizedMessage = shouldSanitizeResponses() ? sanitizeMcpErrorMessage(message) : message;\n\n return {\n isError: true,\n content: [{ type: \"text\", text: JSON.stringify({ code, message: sanitizedMessage }) }]\n };\n}\n\nexport function toToolError(error: unknown): CallToolResult {\n if (error instanceof RestClientError || error instanceof WorkspaceError) {\n return toolError(error.code, error.message);\n }\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return toolError(\"INTERNAL_ERROR\", message);\n}\n\nexport async function runTool(handler: () => Promise<unknown>, options?: RunToolOptions): Promise<CallToolResult> {\n try {\n let data = await handler();\n\n if (shouldSanitizeResponses()) {\n data = sanitizeMcpToolResult(data, { workspaceRoot: options?.workspaceRoot });\n }\n\n return jsonResult(data);\n } catch (error: unknown) {\n return toToolError(error);\n }\n}\n", "export class WorkspaceError extends Error {\n constructor(\n public readonly code: string,\n message: string\n ) {\n super(message);\n this.name = \"WorkspaceError\";\n }\n}\n", "import { AGENT_RUNS_ROUTES } from \"@task-boards/api/agent-runs/agent-runs.api\";\nimport type {\n AgentRunPageResponse,\n AgentRunResponse,\n ClaimAgentRunsResponse\n} from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\n\nimport { type RestClient, RestClientError } from \"../rest-client.js\";\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\n/** Default base delay before retrying a transient claim failure. */\nconst DEFAULT_RETRY_BASE_MS = 500;\n/** Default ceiling for the exponential retry backoff. */\nconst DEFAULT_RETRY_MAX_MS = 30_000;\n/** Default max inflight runs when limit is omitted. */\nconst DEFAULT_INFLIGHT_LIMIT = 10;\n\nexport interface PollAgentRunsOptions {\n projectId: string;\n timeoutMs: number;\n pollIntervalMs: number;\n /** Max runs to claim per poll; default 1. */\n limit?: number;\n /** Base backoff for transient claim failures; default {@link DEFAULT_RETRY_BASE_MS}. */\n retryBaseMs?: number;\n /** Ceiling for the exponential retry backoff; default {@link DEFAULT_RETRY_MAX_MS}. */\n retryMaxMs?: number;\n}\n\nexport interface FetchInflightRunsOptions {\n projectId: string;\n /** Max runs to return; default {@link DEFAULT_INFLIGHT_LIMIT}. */\n limit?: number;\n}\n\nexport interface PollAgentRunsResult {\n /** Newly claimed PENDING\u2192DISPATCHED runs (unchanged semantics). */\n items: AgentRunResponse[];\n /** Resume candidates: existing DISPATCHED or ACKNOWLEDGED (not re-claimed). */\n inflightRuns: AgentRunResponse[];\n timedOut: boolean;\n}\n\nexport interface PollAgentRunsDeps {\n sleep: (ms: number) => Promise<void>;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\n/**\n * A claim failure is transient when it is safe to retry: network/timeout errors\n * (no HTTP status) and 5xx upstream responses. Auth/validation 4xx and unexpected\n * non-REST errors are non-transient and must propagate.\n */\nfunction isTransientClaimError(error: unknown): boolean {\n if (!(error instanceof RestClientError)) {\n return false;\n }\n if (error.status === undefined) {\n return error.code === \"HTTP_ERROR\";\n }\n return error.status >= 500;\n}\n\nfunction computeBackoffMs(consecutiveFailures: number, baseMs: number, maxMs: number): number {\n const exponential = baseMs * 2 ** (consecutiveFailures - 1);\n return Math.min(exponential, maxMs);\n}\n\nfunction compareInflightRuns(a: AgentRunResponse, b: AgentRunResponse): number {\n if (a.requiresAttention !== b.requiresAttention) {\n return a.requiresAttention ? -1 : 1;\n }\n\n const aDispatched = a.dispatchedAt ?? \"\";\n const bDispatched = b.dispatchedAt ?? \"\";\n return aDispatched.localeCompare(bDispatched);\n}\n\n/**\n * Lists in-flight DISPATCHED and ACKNOWLEDGED runs for orphan recovery.\n * Excludes PENDING (claim-only) runs.\n */\nexport async function fetchInflightAgentRuns(\n client: RestClient,\n options: FetchInflightRunsOptions\n): Promise<AgentRunResponse[]> {\n const limit = options.limit ?? DEFAULT_INFLIGHT_LIMIT;\n\n const page = await client.get<AgentRunPageResponse>(AGENT_RUNS_ROUTES.listAgentRuns(), {\n projectId: options.projectId,\n activeOnly: \"true\",\n limit: String(limit)\n });\n\n const filtered = page.items.filter(\n run => run.status === AGENT_RUN_STATUS.DISPATCHED || run.status === AGENT_RUN_STATUS.ACKNOWLEDGED\n );\n\n filtered.sort(compareInflightRuns);\n\n return filtered.slice(0, limit);\n}\n\nexport async function pollAgentRuns(\n client: RestClient,\n options: PollAgentRunsOptions,\n deps?: PollAgentRunsDeps\n): Promise<PollAgentRunsResult> {\n const { projectId, timeoutMs, pollIntervalMs, limit } = options;\n\n if (pollIntervalMs > timeoutMs) {\n throw new WorkspaceError(\"VALIDATION_ERROR\", \"pollInterval must not exceed timeout\");\n }\n\n const sleepFn = deps?.sleep ?? sleep;\n const deadline = Date.now() + timeoutMs;\n const claimLimit = limit ?? 1;\n const retryBaseMs = options.retryBaseMs ?? DEFAULT_RETRY_BASE_MS;\n const retryMaxMs = options.retryMaxMs ?? DEFAULT_RETRY_MAX_MS;\n\n let consecutiveFailures = 0;\n\n while (true) {\n let response: ClaimAgentRunsResponse;\n try {\n response = await client.post<ClaimAgentRunsResponse>(AGENT_RUNS_ROUTES.claimAgentRuns(), {\n projectId,\n limit: claimLimit\n });\n consecutiveFailures = 0;\n } catch (error: unknown) {\n if (!isTransientClaimError(error)) {\n throw error;\n }\n\n if (Date.now() >= deadline) {\n return { items: [], inflightRuns: [], timedOut: true };\n }\n\n consecutiveFailures += 1;\n const backoffMs = computeBackoffMs(consecutiveFailures, retryBaseMs, retryMaxMs);\n const remainingMs = deadline - Date.now();\n await sleepFn(Math.min(backoffMs, remainingMs));\n continue;\n }\n\n if (response.items.length > 0) {\n return { items: response.items, inflightRuns: [], timedOut: false };\n }\n\n const inflightRuns = await fetchInflightAgentRuns(client, { projectId, limit: claimLimit });\n if (inflightRuns.length > 0) {\n return { items: [], inflightRuns, timedOut: false };\n }\n\n if (Date.now() >= deadline) {\n return { items: [], inflightRuns: [], timedOut: true };\n }\n\n const remainingMs = deadline - Date.now();\n const waitMs = Math.min(pollIntervalMs, remainingMs);\n await sleepFn(waitMs);\n }\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { AgentRunResponse } from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport type { ProjectResolutionSource } from \"@task-boards/api/projects/project-binding.types\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { resolveProject } from \"../workspace/resolve-project.js\";\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\nimport { enrichPollResult, type OrchestratorHints } from \"./orchestrator-hints.js\";\nimport { runTool } from \"./tool-utils.js\";\nimport { pollAgentRuns } from \"./wait-for-agent-runs.js\";\n\nexport type RunOrchestratorResolutionSource = ProjectResolutionSource | \"explicit\";\n\nexport interface RunOrchestratorOnceOptions {\n projectId?: string;\n timeoutMs: number;\n pollIntervalMs: number;\n limit: number;\n workspaceRootOverride?: string;\n envWorkspaceRoot?: string;\n}\n\nexport interface RunOrchestratorOnceResponse {\n projectId: string;\n resolutionSource: RunOrchestratorResolutionSource;\n items: AgentRunResponse[];\n inflightRuns: AgentRunResponse[];\n timedOut: boolean;\n orchestrator: OrchestratorHints;\n}\n\nexport async function runOrchestratorOnce(\n client: RestClient,\n options: RunOrchestratorOnceOptions\n): Promise<RunOrchestratorOnceResponse> {\n let projectId = options.projectId;\n let resolutionSource: RunOrchestratorResolutionSource = \"explicit\";\n\n if (projectId === undefined) {\n const resolved = await resolveProject(client, {\n workspaceRootOverride: options.workspaceRootOverride,\n envWorkspaceRoot: options.envWorkspaceRoot\n });\n\n if (resolved.projectId === null) {\n const hint = resolved.hint ?? \"Could not resolve project for workspace.\";\n throw new WorkspaceError(\"PROJECT_NOT_FOUND\", hint);\n }\n\n projectId = resolved.projectId;\n resolutionSource = resolved.resolutionSource;\n }\n\n const pollResult = await pollAgentRuns(client, {\n projectId,\n timeoutMs: options.timeoutMs,\n pollIntervalMs: options.pollIntervalMs,\n limit: options.limit\n });\n\n const enriched = enrichPollResult(pollResult.items, pollResult.inflightRuns, pollResult.timedOut);\n\n return {\n projectId,\n resolutionSource,\n items: enriched.items,\n inflightRuns: enriched.inflightRuns,\n timedOut: enriched.timedOut,\n orchestrator: enriched.orchestrator\n };\n}\n\nexport function registerOrchestratorTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"run_orchestrator_once\",\n {\n description:\n \"Resolve project (if needed), long-poll agent runs with atomic claim, and return orchestrator hints. Claims only STORY items assigned to \u0410\u0433\u0435\u043D\u0442 \u0418\u0418 (SERVICE user). Does not call sync_git_releases \u2014 the orchestrator agent decides when to sync.\",\n inputSchema: {\n projectId: z\n .string()\n .uuid()\n .optional()\n .describe(\"Project UUID; when omitted, resolves via .task-boards.yaml / .cursor/rules / folder name\"),\n timeout: z.number().int().min(1).max(300).default(120).describe(\"Maximum wait in seconds (1\u2013300, default 120)\"),\n pollInterval: z\n .number()\n .int()\n .min(1)\n .max(60)\n .default(2)\n .describe(\"Seconds between polls (1\u201360, default 2); must not exceed timeout\"),\n limit: z.number().int().min(1).max(10).default(1).describe(\"Max runs to claim per poll (1\u201310, default 1)\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute workspace root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ projectId, timeout, pollInterval, limit, workspaceRoot }) =>\n runTool(\n async (): Promise<RunOrchestratorOnceResponse> =>\n runOrchestratorOnce(client, {\n projectId,\n timeoutMs: timeout * 1000,\n pollIntervalMs: pollInterval * 1000,\n limit,\n workspaceRootOverride: workspaceRoot,\n envWorkspaceRoot: config.workspaceRoot\n })\n )\n );\n}\n", "import { basename } from \"node:path\";\n\nimport { PROJECTS_ROUTES } from \"@task-boards/api/projects/projects.api\";\nimport type { ResolveProjectResponse } from \"@task-boards/api/projects/project-binding.types\";\nimport type { ProjectListResponse, ProjectResponse } from \"@task-boards/api/projects/projects.types\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { autoMatchProject } from \"./auto-match-project.js\";\nimport { parseIdeRules } from \"./parse-ide-rules.js\";\nimport { parseTaskBoardsYaml } from \"./parse-task-boards-yaml.js\";\nimport { resolveWorkspaceRoot } from \"./resolve-workspace-root.js\";\n\nexport interface ResolveProjectOptions {\n workspaceRootOverride?: string;\n envWorkspaceRoot?: string;\n}\n\nfunction emptyResponse(workspaceRoot: string): ResolveProjectResponse {\n return {\n resolutionSource: \"ambiguous\",\n workspaceRoot,\n projectId: null,\n name: null,\n key: null,\n presetCode: null,\n hint: \"No project binding found. Add .task-boards.yaml, an IDE rule (.cursor/rules) with projectId, or rename the folder to match a project key/name.\"\n };\n}\n\nfunction fromProject(\n workspaceRoot: string,\n resolutionSource: ResolveProjectResponse[\"resolutionSource\"],\n project: ProjectResponse\n): ResolveProjectResponse {\n return {\n resolutionSource,\n workspaceRoot,\n projectId: project.id,\n name: project.name,\n key: project.key,\n presetCode: project.presetCode\n };\n}\n\nasync function enrichProject(\n client: RestClient,\n workspaceRoot: string,\n resolutionSource: ResolveProjectResponse[\"resolutionSource\"],\n projectId: string\n): Promise<ResolveProjectResponse> {\n const project = await client.get<ProjectResponse>(PROJECTS_ROUTES.getProject(projectId));\n return fromProject(workspaceRoot, resolutionSource, project);\n}\n\nexport async function resolveProject(\n client: RestClient,\n options: ResolveProjectOptions = {}\n): Promise<ResolveProjectResponse> {\n const workspaceRoot = resolveWorkspaceRoot(options.workspaceRootOverride, options.envWorkspaceRoot);\n\n const yamlProjectId = parseTaskBoardsYaml(workspaceRoot);\n if (yamlProjectId !== null) {\n return enrichProject(client, workspaceRoot, \"yaml\", yamlProjectId);\n }\n\n const rulesResult = parseIdeRules(workspaceRoot);\n if (rulesResult.status === \"ambiguous\") {\n return {\n ...emptyResponse(workspaceRoot),\n hint: \"Multiple distinct projectId values found in .cursor/rules. Use .task-boards.yaml or set WORKSPACE_ROOT to a single-project workspace.\"\n };\n }\n if (rulesResult.status === \"found\") {\n return enrichProject(client, workspaceRoot, \"rule\", rulesResult.projectId);\n }\n\n const folderToken = basename(workspaceRoot);\n const listResponse = await client.get<ProjectListResponse>(PROJECTS_ROUTES.listProjects());\n const autoMatch = autoMatchProject(folderToken, listResponse.items);\n\n if (autoMatch.kind === \"single\") {\n return enrichProject(client, workspaceRoot, \"auto_match\", autoMatch.project.id);\n }\n\n if (autoMatch.kind === \"candidates\") {\n return {\n resolutionSource: \"ambiguous\",\n workspaceRoot,\n projectId: null,\n name: null,\n key: null,\n presetCode: null,\n candidates: autoMatch.candidates,\n hint: `Multiple projects match folder name \"${folderToken}\". Pick one candidate or add .task-boards.yaml.`\n };\n }\n\n return emptyResponse(workspaceRoot);\n}\n", "export function normalizeToken(value: string): string {\n return value\n .toLowerCase()\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]/g, \"\");\n}\n", "import type { BoardPresetCode } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport type { ResolveProjectCandidate } from \"@task-boards/api/projects/project-binding.types\";\nimport type { ProjectResponse } from \"@task-boards/api/projects/projects.types\";\n\nimport { normalizeToken } from \"./normalize-token.js\";\n\nexport interface AutoMatchProjectInput {\n id: string;\n name: string;\n key: string;\n presetCode: BoardPresetCode;\n}\n\nexport type AutoMatchProjectResult =\n | { kind: \"single\"; project: AutoMatchProjectInput; matchedBy: \"key\" | \"name\" }\n | { kind: \"candidates\"; candidates: ResolveProjectCandidate[] }\n | { kind: \"none\" };\n\nfunction toCandidate(project: AutoMatchProjectInput, matchedBy: \"key\" | \"name\"): ResolveProjectCandidate {\n return {\n projectId: project.id,\n name: project.name,\n key: project.key,\n presetCode: project.presetCode,\n matchedBy\n };\n}\n\nexport function autoMatchProject(folderToken: string, projects: ProjectResponse[]): AutoMatchProjectResult {\n const normalizedFolder = normalizeToken(folderToken);\n if (normalizedFolder.length === 0) {\n return { kind: \"none\" };\n }\n\n const keyMatches: AutoMatchProjectInput[] = [];\n const nameMatches: AutoMatchProjectInput[] = [];\n\n for (const project of projects) {\n const input: AutoMatchProjectInput = {\n id: project.id,\n name: project.name,\n key: project.key,\n presetCode: project.presetCode\n };\n\n if (normalizeToken(project.key) === normalizedFolder) {\n keyMatches.push(input);\n }\n if (normalizeToken(project.name) === normalizedFolder) {\n nameMatches.push(input);\n }\n }\n\n const uniqueById = new Map<string, { project: AutoMatchProjectInput; matchedBy: \"key\" | \"name\" }>();\n for (const project of keyMatches) {\n uniqueById.set(project.id, { project, matchedBy: \"key\" });\n }\n for (const project of nameMatches) {\n if (!uniqueById.has(project.id)) {\n uniqueById.set(project.id, { project, matchedBy: \"name\" });\n }\n }\n\n const matches = [...uniqueById.values()];\n if (matches.length === 1) {\n const match = matches[0];\n if (match === undefined) {\n return { kind: \"none\" };\n }\n return { kind: \"single\", project: match.project, matchedBy: match.matchedBy };\n }\n if (matches.length > 1) {\n return {\n kind: \"candidates\",\n candidates: matches.map(match => toCandidate(match.project, match.matchedBy))\n };\n }\n\n return { kind: \"none\" };\n}\n", "import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst PROJECT_ID_LINE_PATTERN =\n /projectId\\s*[:=]\\s*[\"']?([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/gi;\n\nconst TASK_BOARDS_UUID_PATTERN =\n /task-boards[^\\n\\r]*?([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/gi;\n\nexport type ParseIdeRulesResult =\n | { status: \"found\"; projectId: string }\n | { status: \"missing\" }\n | { status: \"ambiguous\" };\n\nfunction extractUuids(content: string): Set<string> {\n const ids = new Set<string>();\n\n for (const pattern of [PROJECT_ID_LINE_PATTERN, TASK_BOARDS_UUID_PATTERN]) {\n pattern.lastIndex = 0;\n let match = pattern.exec(content);\n while (match !== null) {\n const id = match[1];\n if (id !== undefined) {\n ids.add(id.toLowerCase());\n }\n match = pattern.exec(content);\n }\n }\n\n return ids;\n}\n\nexport function parseIdeRules(workspaceRoot: string): ParseIdeRulesResult {\n const rulesDir = join(workspaceRoot, \".cursor\", \"rules\");\n if (!existsSync(rulesDir)) {\n return { status: \"missing\" };\n }\n\n const entries = readdirSync(rulesDir, { withFileTypes: true });\n const allIds = new Set<string>();\n\n for (const entry of entries) {\n if (!entry.isFile()) {\n continue;\n }\n if (!entry.name.endsWith(\".mdc\") && !entry.name.endsWith(\".md\")) {\n continue;\n }\n\n const content = readFileSync(join(rulesDir, entry.name), \"utf8\");\n for (const id of extractUuids(content)) {\n allIds.add(id);\n }\n }\n\n if (allIds.size === 0) {\n return { status: \"missing\" };\n }\n if (allIds.size === 1) {\n const projectId = [...allIds][0];\n if (projectId === undefined) {\n return { status: \"missing\" };\n }\n return { status: \"found\", projectId };\n }\n return { status: \"ambiguous\" };\n}\n", "import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst TASK_BOARDS_FILE = \".task-boards.yaml\";\nconst VERSION_PATTERN = /^\\s*version\\s*:\\s*1\\s*$/m;\nconst PROJECT_ID_PATTERN =\n /^\\s*projectId\\s*:\\s*[\"']?([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})[\"']?\\s*$/im;\n\nexport function parseTaskBoardsYaml(workspaceRoot: string): string | null {\n const filePath = join(workspaceRoot, TASK_BOARDS_FILE);\n if (!existsSync(filePath)) {\n return null;\n }\n\n const content = readFileSync(filePath, \"utf8\");\n if (!VERSION_PATTERN.test(content)) {\n return null;\n }\n\n const match = PROJECT_ID_PATTERN.exec(content);\n if (match === null) {\n return null;\n }\n\n return match[1] ?? null;\n}\n", "import { existsSync, statSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\n\nimport { WorkspaceError } from \"./workspace-error.js\";\n\nconst TASK_BOARDS_FILE = \".task-boards.yaml\";\nconst MAX_UPWARD_LEVELS = 20;\n\nfunction assertDirectory(path: string, source: string): string {\n const absolutePath = resolve(path);\n if (!existsSync(absolutePath)) {\n throw new WorkspaceError(\"WORKSPACE_NOT_FOUND\", `${source} does not exist: ${absolutePath}`);\n }\n const stats = statSync(absolutePath);\n if (!stats.isDirectory()) {\n throw new WorkspaceError(\"WORKSPACE_NOT_FOUND\", `${source} is not a directory: ${absolutePath}`);\n }\n return absolutePath;\n}\n\nfunction assertWithinAllowedRoot(target: string, allowedRoot: string): void {\n const relativePath = relative(allowedRoot, target);\n const isNested = relativePath !== \"\" && !relativePath.startsWith(\"..\") && !isAbsolute(relativePath);\n if (target !== allowedRoot && !isNested) {\n throw new WorkspaceError(\n \"WORKSPACE_OUT_OF_BOUNDS\",\n `workspaceRoot is outside the allowed WORKSPACE_ROOT: ${target}`\n );\n }\n}\n\nfunction assertGitRepository(absolutePath: string): void {\n if (!existsSync(join(absolutePath, \".git\"))) {\n throw new WorkspaceError(\"WORKSPACE_NOT_GIT_REPO\", `workspaceRoot is not a git repository: ${absolutePath}`);\n }\n}\n\nfunction findWorkspaceRootUpward(startDir: string): string | null {\n let current = resolve(startDir);\n for (let level = 0; level <= MAX_UPWARD_LEVELS; level += 1) {\n const markerPath = join(current, TASK_BOARDS_FILE);\n if (existsSync(markerPath)) {\n return current;\n }\n const parent = dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n return null;\n}\n\nexport function resolveWorkspaceRoot(explicitOverride?: string, envWorkspaceRoot?: string): string {\n const allowedRoot =\n envWorkspaceRoot !== undefined && envWorkspaceRoot.trim() !== \"\"\n ? assertDirectory(envWorkspaceRoot, \"WORKSPACE_ROOT\")\n : undefined;\n\n if (explicitOverride !== undefined && explicitOverride.trim() !== \"\") {\n const resolved = assertDirectory(explicitOverride, \"workspaceRoot\");\n // A client-supplied path is untrusted: confine it to the configured allowed\n // root when one is set, otherwise require it to be an actual git repository.\n if (allowedRoot !== undefined) {\n assertWithinAllowedRoot(resolved, allowedRoot);\n } else {\n assertGitRepository(resolved);\n }\n return resolved;\n }\n\n if (allowedRoot !== undefined) {\n return allowedRoot;\n }\n\n const fromMarker = findWorkspaceRootUpward(process.cwd());\n if (fromMarker !== null) {\n return fromMarker;\n }\n\n return resolve(process.cwd());\n}\n", "import { existsSync } from \"node:fs\";\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { ATTACHMENTS_ROUTES } from \"@task-boards/api/attachments/attachments.api\";\nimport type { AttachmentListResponse, AttachmentResponse } from \"@task-boards/api/attachments/attachments.types\";\nimport { isBlockedMcpAttachmentFileName } from \"@task-boards/shared\";\nimport { z } from \"zod\";\n\nimport { detectMimeType } from \"../attachments/detect-mime-type.js\";\nimport { buildStagingDir, buildStagingPath, writeStagingFile } from \"../attachments/staging.util.js\";\nimport type { McpServerConfig } from \"../config.js\";\nimport { RestClientError, type RestClient } from \"../rest-client.js\";\nimport { readConfinedWorkspaceFile } from \"../workspace/confine-file-path.js\";\nimport { resolveWorkspaceRoot } from \"../workspace/resolve-workspace-root.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nconst MAX_ATTACHMENT_COUNT = 20;\nconst MAX_TOTAL_BYTES = 200 * 1024 * 1024;\n\nexport interface DownloadWorkItemAttachmentsResult {\n workItemId: string;\n downloaded: { attachmentId: string; fileName: string; path: string; sizeBytes: number }[];\n skipped: { attachmentId: string; reason: string }[];\n stagingDir: string;\n}\n\nexport interface UploadWorkItemAttachmentResult {\n workItemId: string;\n attachment: AttachmentResponse;\n sourcePath: string;\n}\n\nexport async function fetchAttachments(client: RestClient, workItemId: string): Promise<AttachmentListResponse> {\n return client.get<AttachmentListResponse>(ATTACHMENTS_ROUTES.listAttachments(workItemId));\n}\n\nfunction filterAttachments(items: AttachmentResponse[], attachmentIds?: string[]): AttachmentResponse[] {\n if (attachmentIds === undefined || attachmentIds.length === 0) {\n return items;\n }\n const idSet = new Set(attachmentIds);\n return items.filter(item => idSet.has(item.id));\n}\n\nfunction assertDownloadLimits(attachments: AttachmentResponse[]): void {\n if (attachments.length > MAX_ATTACHMENT_COUNT) {\n throw new RestClientError(\n \"ATTACHMENT_LIMIT_EXCEEDED\",\n `Cannot download more than ${MAX_ATTACHMENT_COUNT} attachments at once (requested ${attachments.length})`\n );\n }\n\n const totalBytes = attachments.reduce((sum, attachment) => sum + attachment.sizeBytes, 0);\n if (totalBytes > MAX_TOTAL_BYTES) {\n throw new RestClientError(\n \"ATTACHMENT_SIZE_LIMIT_EXCEEDED\",\n `Total attachment size ${totalBytes} bytes exceeds limit of ${MAX_TOTAL_BYTES} bytes`\n );\n }\n}\n\nexport async function downloadWorkItemAttachments(\n client: RestClient,\n params: {\n workItemId: string;\n workspaceRoot: string;\n attachmentIds?: string[];\n overwrite?: boolean;\n blockSensitiveAttachments?: boolean;\n }\n): Promise<DownloadWorkItemAttachmentsResult> {\n const { workItemId, workspaceRoot, attachmentIds, overwrite = false, blockSensitiveAttachments = true } = params;\n const listResponse = await fetchAttachments(client, workItemId);\n const selected = filterAttachments(listResponse.items, attachmentIds);\n assertDownloadLimits(selected);\n\n const stagingDir = buildStagingDir(workspaceRoot, workItemId);\n const downloaded: DownloadWorkItemAttachmentsResult[\"downloaded\"] = [];\n const skipped: DownloadWorkItemAttachmentsResult[\"skipped\"] = [];\n\n if (attachmentIds !== undefined && attachmentIds.length > 0) {\n const selectedIds = new Set(selected.map(item => item.id));\n for (const attachmentId of attachmentIds) {\n if (!selectedIds.has(attachmentId)) {\n skipped.push({ attachmentId, reason: \"not found on work item\" });\n }\n }\n }\n\n for (const attachment of selected) {\n if (blockSensitiveAttachments && isBlockedMcpAttachmentFileName(attachment.fileName)) {\n skipped.push({ attachmentId: attachment.id, reason: \"blocked_sensitive_filename\" });\n continue;\n }\n\n const stagingPath = buildStagingPath(workspaceRoot, workItemId, attachment.id, attachment.fileName);\n if (!overwrite && existsSync(stagingPath)) {\n skipped.push({ attachmentId: attachment.id, reason: \"file already exists (set overwrite=true to replace)\" });\n continue;\n }\n\n const { data } = await client.downloadBinary(ATTACHMENTS_ROUTES.downloadAttachment(workItemId, attachment.id));\n await writeStagingFile(stagingPath, data);\n downloaded.push({\n attachmentId: attachment.id,\n fileName: attachment.fileName,\n path: stagingPath,\n sizeBytes: data.length\n });\n }\n\n return {\n workItemId,\n downloaded,\n skipped,\n stagingDir\n };\n}\n\nexport async function uploadWorkItemAttachment(\n client: RestClient,\n params: {\n workItemId: string;\n workspaceRoot: string;\n filePath: string;\n blockSensitiveAttachments?: boolean;\n }\n): Promise<UploadWorkItemAttachmentResult> {\n const { workItemId, workspaceRoot, filePath, blockSensitiveAttachments = true } = params;\n const confinedFile = readConfinedWorkspaceFile(workspaceRoot, filePath);\n\n if (blockSensitiveAttachments && isBlockedMcpAttachmentFileName(confinedFile.fileName)) {\n throw new RestClientError(\n \"BLOCKED_SENSITIVE_FILENAME\",\n `Attachment filename is blocked for MCP upload: ${confinedFile.fileName}`\n );\n }\n\n const mimeType = detectMimeType(confinedFile.absolutePath);\n const attachment = await client.uploadMultipart<AttachmentResponse>(\n ATTACHMENTS_ROUTES.uploadAttachment(workItemId),\n \"file\",\n {\n buffer: confinedFile.buffer,\n fileName: confinedFile.fileName,\n mimeType\n }\n );\n\n return {\n workItemId,\n attachment,\n sourcePath: confinedFile.absolutePath\n };\n}\n\nexport function registerAttachmentTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"list_work_item_attachments\",\n {\n description: \"List file attachments for a work item.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) => runTool(async () => fetchAttachments(client, workItemId))\n );\n\n server.registerTool(\n \"download_work_item_attachments\",\n {\n description:\n \"Download work item attachments into the local workspace staging directory (.task-boards/attachments).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n attachmentIds: z\n .array(z.string().uuid())\n .optional()\n .describe(\"Optional subset of attachment UUIDs; downloads all when omitted\"),\n overwrite: z.boolean().optional().default(false).describe(\"Replace existing staged files when true\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to git repo root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ workItemId, attachmentIds, overwrite, workspaceRoot }) => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return runTool(\n async () =>\n downloadWorkItemAttachments(client, {\n workItemId,\n workspaceRoot: resolvedWorkspaceRoot,\n attachmentIds,\n overwrite,\n blockSensitiveAttachments: config.blockSensitiveAttachments\n }),\n { workspaceRoot: resolvedWorkspaceRoot }\n );\n }\n );\n\n server.registerTool(\n \"upload_work_item_attachment\",\n {\n description: \"Upload a local workspace file as a work item attachment (multipart field file).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n filePath: z\n .string()\n .describe(\"Absolute or workspace-relative path to the file; must stay within workspaceRoot\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to git repo root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ workItemId, filePath, workspaceRoot }) => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return runTool(\n async () =>\n uploadWorkItemAttachment(client, {\n workItemId,\n workspaceRoot: resolvedWorkspaceRoot,\n filePath,\n blockSensitiveAttachments: config.blockSensitiveAttachments\n }),\n { workspaceRoot: resolvedWorkspaceRoot }\n );\n }\n );\n}\n", "import { basename } from \"node:path\";\n\nimport { lookup as lookupMimeType } from \"mime-types\";\n\nexport function detectMimeType(filePath: string): string {\n const mimeType = lookupMimeType(basename(filePath));\n return typeof mimeType === \"string\" ? mimeType : \"application/octet-stream\";\n}\n", "import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nconst MAX_FILE_NAME_LENGTH = 200;\n\nexport function sanitizeFileName(name: string): string {\n const baseName = name.split(/[/\\\\]/).pop() ?? name;\n const sanitized = baseName.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n return sanitized.length > MAX_FILE_NAME_LENGTH ? sanitized.slice(0, MAX_FILE_NAME_LENGTH) : sanitized;\n}\n\nexport function buildStagingPath(\n workspaceRoot: string,\n workItemId: string,\n attachmentId: string,\n fileName: string\n): string {\n const sanitizedFileName = sanitizeFileName(fileName);\n return resolve(workspaceRoot, \".task-boards\", \"attachments\", workItemId, `${attachmentId}_${sanitizedFileName}`);\n}\n\nexport function buildStagingDir(workspaceRoot: string, workItemId: string): string {\n return resolve(workspaceRoot, \".task-boards\", \"attachments\", workItemId);\n}\n\nexport async function writeStagingFile(path: string, data: Buffer): Promise<void> {\n const absolutePath = resolve(path);\n await mkdir(dirname(absolutePath), { recursive: true });\n await writeFile(absolutePath, data);\n}\n", "import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { basename, isAbsolute, relative, resolve } from \"node:path\";\n\nimport { WorkspaceError } from \"./workspace-error.js\";\n\nexport interface ConfinedWorkspaceFile {\n absolutePath: string;\n fileName: string;\n sizeBytes: number;\n buffer: Buffer;\n}\n\nexport function confineFilePath(workspaceRoot: string, filePath: string): string {\n const resolvedRoot = resolve(workspaceRoot);\n const resolvedPath = isAbsolute(filePath) ? resolve(filePath) : resolve(resolvedRoot, filePath);\n const relativePath = relative(resolvedRoot, resolvedPath);\n\n if (relativePath.startsWith(\"..\") || isAbsolute(relativePath)) {\n throw new WorkspaceError(\n \"FILE_OUT_OF_BOUNDS\",\n `filePath is outside workspaceRoot: ${basename(filePath) || filePath}`\n );\n }\n\n if (!existsSync(resolvedPath)) {\n throw new WorkspaceError(\"FILE_NOT_FOUND\", `filePath does not exist: ${basename(filePath) || filePath}`);\n }\n\n const stats = statSync(resolvedPath);\n if (!stats.isFile()) {\n throw new WorkspaceError(\"FILE_NOT_FOUND\", `filePath is not a file: ${basename(filePath) || filePath}`);\n }\n\n return resolvedPath;\n}\n\nexport function readConfinedWorkspaceFile(workspaceRoot: string, filePath: string): ConfinedWorkspaceFile {\n const absolutePath = confineFilePath(workspaceRoot, filePath);\n const stats = statSync(absolutePath);\n const buffer = readFileSync(absolutePath);\n\n return {\n absolutePath,\n fileName: basename(absolutePath),\n sizeBytes: stats.size,\n buffer\n };\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { BOARDS_ROUTES } from \"@task-boards/api/boards/boards.api\";\nimport type { BoardResponse } from \"@task-boards/api/boards/boards.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerBoardTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"get_board\",\n {\n description: \"Get board projection for a project (columns and on-board work items).\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\")\n }\n },\n async ({ projectId }) => runTool(async () => client.get<BoardResponse>(BOARDS_ROUTES.getBoard(projectId)))\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { COMMENTS_ROUTES } from \"@task-boards/api/comments/comments.api\";\nimport type {\n CommentListResponse,\n CommentResponse,\n CreateCommentRequest\n} from \"@task-boards/api/comments/comments.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport async function fetchComments(client: RestClient, workItemId: string): Promise<CommentListResponse> {\n return client.get<CommentListResponse>(COMMENTS_ROUTES.listComments(workItemId));\n}\n\nexport async function postComment(client: RestClient, workItemId: string, body: string): Promise<CommentResponse> {\n const request: CreateCommentRequest = { body };\n return client.post<CommentResponse>(COMMENTS_ROUTES.createComment(workItemId), request);\n}\n\nexport function registerCommentTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_comments\",\n {\n description: \"List comments for a work item (newest last).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) => runTool(async () => fetchComments(client, workItemId))\n );\n\n server.registerTool(\n \"create_comment\",\n {\n description:\n \"Create a comment on a work item. Use for orchestrator NEEDS_CLARIFICATION questions before complete_agent_run.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n body: z.string().min(1).describe(\"Comment body (markdown supported)\")\n }\n },\n async ({ workItemId, body }) => runTool(async () => postComment(client, workItemId, body))\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { LABEL_COLOR } from \"@task-boards/api/enums/label-color.enum\";\nimport { LABELS_ROUTES } from \"@task-boards/api/labels/labels.api\";\nimport type {\n CreateLabelRequest,\n LabelListResponse,\n LabelResponse,\n UpdateLabelRequest\n} from \"@task-boards/api/labels/labels.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nconst labelColorValues = Object.values(LABEL_COLOR) as [string, ...string[]];\n\nexport function registerLabelTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_labels\",\n {\n description: \"List labels for a project.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\")\n }\n },\n async ({ projectId }) => runTool(async () => client.get<LabelListResponse>(LABELS_ROUTES.listLabels(projectId)))\n );\n\n server.registerTool(\n \"create_label\",\n {\n description: \"Create a project label.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n name: z.string().min(1).max(64).describe(\"Label name\"),\n color: z.enum(labelColorValues).describe(\"Label color\")\n }\n },\n async ({ projectId, name, color }) =>\n runTool(async () => {\n const body: CreateLabelRequest = {\n name,\n color: color as CreateLabelRequest[\"color\"]\n };\n return client.post<LabelResponse>(LABELS_ROUTES.createLabel(projectId), body);\n })\n );\n\n server.registerTool(\n \"update_label\",\n {\n description: \"Update a project label.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n labelId: z.string().uuid().describe(\"Label UUID\"),\n name: z.string().min(1).max(64).optional().describe(\"Updated label name\"),\n color: z.enum(labelColorValues).optional().describe(\"Updated label color\")\n }\n },\n async ({ projectId, labelId, name, color }) =>\n runTool(async () => {\n const body: UpdateLabelRequest = {\n name,\n color: color as UpdateLabelRequest[\"color\"]\n };\n return client.patch<LabelResponse>(LABELS_ROUTES.updateLabel(projectId, labelId), body);\n })\n );\n\n server.registerTool(\n \"delete_label\",\n {\n description: \"Delete a project label.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n labelId: z.string().uuid().describe(\"Label UUID\")\n }\n },\n async ({ projectId, labelId }) =>\n runTool(async () => {\n await client.delete(LABELS_ROUTES.deleteLabel(projectId, labelId));\n return { deleted: true };\n })\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { BOARD_PRESET_CODE } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport { ESTIMATION_MODE } from \"@task-boards/api/enums/estimation-mode.enum\";\nimport { SUBAGENT_ROLE } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { TASK_CARD_ESTIMATION_DISPLAY } from \"@task-boards/api/enums/task-card-estimation-display.enum\";\nimport { PROJECTS_ROUTES } from \"@task-boards/api/projects/projects.api\";\nimport type { ProjectListResponse, ProjectResponse } from \"@task-boards/api/projects/projects.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool, toolError } from \"./tool-utils.js\";\n\nconst CREATE_PROJECT_FORBIDDEN_MESSAGE =\n \"Project creation requires a human session. Create projects in the task-boards web UI.\";\n\nconst UPDATE_PROJECT_FORBIDDEN_MESSAGE =\n \"Project settings updates require a human session. Use the task-boards web UI.\";\n\nconst boardPresetValues = Object.values(BOARD_PRESET_CODE) as [string, ...string[]];\nconst estimationModeValues = Object.values(ESTIMATION_MODE) as [string, ...string[]];\nconst taskCardEstimationDisplayValues = Object.values(TASK_CARD_ESTIMATION_DISPLAY) as [string, ...string[]];\nconst subagentRoleValues = Object.values(SUBAGENT_ROLE) as [string, ...string[]];\nconst subagentRoleBindingEntrySchema = z.object({\n slug: z.string().min(1),\n enabled: z.boolean().optional().default(true)\n});\n\nconst subagentRoleBindingSchema = z.record(z.enum(subagentRoleValues), subagentRoleBindingEntrySchema);\n\nexport function registerProjectTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_projects\",\n {\n description: \"List task-boards projects (non-archived by default).\",\n inputSchema: {\n status: z.enum([\"ACTIVE\", \"ARCHIVED\", \"ALL\"]).optional().describe(\"Filter by project status\")\n }\n },\n async ({ status }) =>\n runTool(async () => {\n const params: Record<string, string | undefined> = {};\n if (status !== undefined) {\n params.status = status.toLowerCase();\n }\n return client.get<ProjectListResponse>(PROJECTS_ROUTES.listProjects(), params);\n })\n );\n\n server.registerTool(\n \"get_project\",\n {\n description: \"Get a project by id.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\")\n }\n },\n async ({ projectId }) => runTool(async () => client.get<ProjectResponse>(PROJECTS_ROUTES.getProject(projectId)))\n );\n\n server.registerTool(\n \"create_project\",\n {\n description: \"Create a project and its board from the selected preset.\",\n inputSchema: {\n name: z.string().min(1).max(255).describe(\"Project display name\"),\n presetCode: z.enum(boardPresetValues).describe(\"Board preset code\"),\n description: z.string().nullable().optional().describe(\"Optional project description\"),\n key: z\n .string()\n .regex(/^[A-Z][A-Z0-9_]*$/)\n .max(32)\n .optional()\n .describe(\"Optional project key; derived from name when omitted\")\n }\n },\n async () => Promise.resolve(toolError(\"FORBIDDEN\", CREATE_PROJECT_FORBIDDEN_MESSAGE))\n );\n\n server.registerTool(\n \"update_project\",\n {\n description:\n \"Update project settings (name, description, estimation mode/required, task card estimation display, subagent role bindings). Requires write scope.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n name: z.string().min(1).max(255).optional().describe(\"Updated project name\"),\n description: z.string().nullable().optional().describe(\"Updated project description\"),\n estimationMode: z\n .enum(estimationModeValues)\n .optional()\n .describe(\"Active estimation field: storyPoints or estimate (hours)\"),\n estimationRequired: z\n .boolean()\n .optional()\n .describe(\"When true, active estimation field is required on EPIC/STORY\"),\n taskCardEstimationDisplay: z\n .enum(taskCardEstimationDisplayValues)\n .optional()\n .describe(\"Estimation badge on TaskCard: storyPoints, estimate, or none\"),\n subagentRoleBindings: subagentRoleBindingSchema\n .optional()\n .describe(\n \"Map SUBAGENT_ROLE to { slug, enabled } (enabled defaults true; disabled keeps slug but skips flow)\"\n )\n }\n },\n async () => Promise.resolve(toolError(\"FORBIDDEN\", UPDATE_PROJECT_FORBIDDEN_MESSAGE))\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ResolveProjectResponse } from \"@task-boards/api/projects/project-binding.types\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { resolveProject } from \"../workspace/resolve-project.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerResolveProjectTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"resolve_project\",\n {\n description:\n \"Resolve the task-boards project for the current workspace (.task-boards.yaml, .cursor/rules, or folder name auto-match).\",\n inputSchema: {\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to workspace root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ workspaceRoot }) => {\n const resolvedWorkspaceRoot = workspaceRoot ?? config.workspaceRoot;\n return runTool(\n async (): Promise<ResolveProjectResponse> =>\n resolveProject(client, {\n workspaceRootOverride: workspaceRoot,\n envWorkspaceRoot: config.workspaceRoot\n }),\n { workspaceRoot: resolvedWorkspaceRoot }\n );\n }\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport { syncGitReleasesFromRepo } from \"../git/commit-release-sync.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { resolveWorkspaceRoot } from \"../workspace/resolve-workspace-root.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerSyncGitReleasesTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"sync_git_releases\",\n {\n description:\n \"Fetch origin and sync commits tagged with work-item:{uuid} from the default branch (master/main) and, when cwd is on a feature branch, the current branch too. Use after git push on feature branches; on master/main local commit only. Requires MCP API token with write scope.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to git repo root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ projectId, workspaceRoot }) =>\n runTool(async () => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return syncGitReleasesFromRepo(client, {\n projectId,\n workspaceRoot: resolvedWorkspaceRoot\n });\n })\n );\n}\n", "import { GIT_RELEASE_ROUTES } from \"@task-boards/api/git-release/git-release.api\";\nimport type { GitReleaseItemRequest, SyncGitReleasesResponse } from \"@task-boards/api/git-release/git-release.types\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { createDefaultGitRunner, type GitRunner, type ReleaseCommitRow } from \"./git-runner.js\";\nimport { isValidGitSha } from \"./story-branch.util.js\";\nimport { parseWorkItemIdsFromCommitMessage } from \"./work-item-commit.util.js\";\n\nexport interface CommitReleaseCandidate {\n workItemId: string;\n commitSha: string;\n commitMessage: string;\n committerDateUnix: number;\n}\n\nexport interface SyncGitReleasesFromRepoOptions {\n projectId: string;\n workspaceRoot: string;\n}\n\nexport interface SyncGitReleasesFromRepoResult extends SyncGitReleasesResponse {\n scannedCommits: number;\n dedupedCount: number;\n}\n\nexport interface SyncGitReleasesFromRepoDeps {\n gitRunner?: GitRunner;\n}\n\nexport function buildCommitReleaseCandidates(rows: ReleaseCommitRow[]): CommitReleaseCandidate[] {\n const candidates: CommitReleaseCandidate[] = [];\n\n for (const row of rows) {\n if (!isValidGitSha(row.commitSha)) {\n continue;\n }\n\n const workItemIds = parseWorkItemIdsFromCommitMessage(row.commitMessage);\n if (workItemIds.length === 0) {\n continue;\n }\n\n const commitSha = row.commitSha.toLowerCase();\n for (const workItemId of workItemIds) {\n candidates.push({\n workItemId,\n commitSha,\n commitMessage: row.commitMessage,\n committerDateUnix: row.committerDateUnix\n });\n }\n }\n\n return candidates;\n}\n\nexport function dedupeCommitReleasesByWorkItemId(candidates: CommitReleaseCandidate[]): GitReleaseItemRequest[] {\n const byWorkItemId = new Map<string, CommitReleaseCandidate>();\n\n for (const candidate of candidates) {\n const existing = byWorkItemId.get(candidate.workItemId);\n if (existing === undefined || candidate.committerDateUnix > existing.committerDateUnix) {\n byWorkItemId.set(candidate.workItemId, candidate);\n }\n }\n\n return Array.from(byWorkItemId.values()).map(\n (candidate): GitReleaseItemRequest => ({\n workItemId: candidate.workItemId,\n commitSha: candidate.commitSha,\n commitMessage: candidate.commitMessage\n })\n );\n}\n\nexport async function syncGitReleasesFromRepo(\n client: RestClient,\n options: SyncGitReleasesFromRepoOptions,\n deps?: SyncGitReleasesFromRepoDeps\n): Promise<SyncGitReleasesFromRepoResult> {\n const gitRunner = deps?.gitRunner ?? createDefaultGitRunner();\n const { projectId, workspaceRoot } = options;\n\n await gitRunner.fetchRemote(workspaceRoot);\n const rows = await gitRunner.listReleaseCommits(workspaceRoot);\n const candidates = buildCommitReleaseCandidates(rows);\n const releases = dedupeCommitReleasesByWorkItemId(candidates);\n\n const response = await client.post<SyncGitReleasesResponse>(GIT_RELEASE_ROUTES.syncGitReleases(projectId), {\n releases\n });\n\n return {\n ...response,\n scannedCommits: rows.length,\n dedupedCount: releases.length\n };\n}\n", "import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\nconst execFileAsync = promisify(execFile);\n\nconst RECORD_SEPARATOR = \"\\u001d\";\nconst FIELD_SEPARATOR = \"\\u001f\";\n\nconst DEFAULT_BRANCH_NAMES = new Set([\"master\", \"main\"]);\n\nexport interface ReleaseCommitRow {\n commitSha: string;\n commitMessage: string;\n committerDateUnix: number;\n}\n\nexport interface GitRunner {\n fetchRemote(cwd: string): Promise<void>;\n listReleaseCommits(cwd: string): Promise<ReleaseCommitRow[]>;\n getCurrentBranch(cwd: string): Promise<string>;\n}\n\nfunction wrapGitError(operation: string): WorkspaceError {\n return new WorkspaceError(\"GIT_ERROR\", `git ${operation} failed`);\n}\n\nexport function isDefaultReleaseBranch(branchName: string): boolean {\n return DEFAULT_BRANCH_NAMES.has(branchName.trim().toLowerCase());\n}\n\nexport class ProcessGitRunner implements GitRunner {\n async fetchRemote(cwd: string): Promise<void> {\n try {\n await execFileAsync(\"git\", [\"fetch\", \"origin\"], { cwd });\n } catch {\n throw wrapGitError(\"fetch origin\");\n }\n }\n\n async getCurrentBranch(cwd: string): Promise<string> {\n try {\n const result = await execFileAsync(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], { cwd });\n const branch = result.stdout.trim();\n if (branch.length === 0) {\n throw new WorkspaceError(\"GIT_ERROR\", \"Could not resolve current branch\");\n }\n\n return branch;\n } catch (error: unknown) {\n if (error instanceof WorkspaceError) {\n throw error;\n }\n\n throw wrapGitError(\"resolve current branch\");\n }\n }\n\n async listReleaseCommits(cwd: string): Promise<ReleaseCommitRow[]> {\n const defaultBranchRef = await this.resolveOriginDefaultBranchRef(cwd);\n const refs = [defaultBranchRef];\n\n const currentBranch = await this.getCurrentBranch(cwd);\n if (isDefaultReleaseBranch(currentBranch)) {\n refs.push(\"HEAD\");\n } else {\n refs.push(currentBranch);\n }\n\n const rows: ReleaseCommitRow[] = [];\n const seenShas = new Set<string>();\n\n for (const ref of refs) {\n const refRows = await this.listCommitsForRef(cwd, ref);\n for (const row of refRows) {\n const normalizedSha = row.commitSha.toLowerCase();\n if (seenShas.has(normalizedSha)) {\n continue;\n }\n\n seenShas.add(normalizedSha);\n rows.push(row);\n }\n }\n\n return rows;\n }\n\n private async listCommitsForRef(cwd: string, ref: string): Promise<ReleaseCommitRow[]> {\n let stdout: string;\n\n try {\n const result = await execFileAsync(\n \"git\",\n [\"log\", ref, `--format=%ct${FIELD_SEPARATOR}%H${FIELD_SEPARATOR}%B${RECORD_SEPARATOR}`],\n { cwd, maxBuffer: 10 * 1024 * 1024 }\n );\n stdout = result.stdout;\n } catch {\n throw wrapGitError(`log ${ref}`);\n }\n\n const rows: ReleaseCommitRow[] = [];\n const records = stdout.split(RECORD_SEPARATOR);\n\n for (const record of records) {\n const trimmed = record.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n const firstSeparator = trimmed.indexOf(FIELD_SEPARATOR);\n const secondSeparator = trimmed.indexOf(FIELD_SEPARATOR, firstSeparator + 1);\n if (firstSeparator < 0 || secondSeparator < 0) {\n continue;\n }\n\n const committerDateUnix = Number.parseInt(trimmed.slice(0, firstSeparator), 10);\n const commitSha = trimmed.slice(firstSeparator + 1, secondSeparator).trim();\n const commitMessage = trimmed.slice(secondSeparator + 1);\n\n if (!Number.isFinite(committerDateUnix) || commitSha.length === 0 || commitMessage.length === 0) {\n continue;\n }\n\n rows.push({ commitSha, commitMessage, committerDateUnix });\n }\n\n return rows;\n }\n\n private async resolveOriginDefaultBranchRef(cwd: string): Promise<string> {\n try {\n const result = await execFileAsync(\"git\", [\"symbolic-ref\", \"refs/remotes/origin/HEAD\"], { cwd });\n const ref = result.stdout.trim();\n if (ref.length > 0) {\n return ref;\n }\n } catch {\n // fall through to rev-parse\n }\n\n try {\n const result = await execFileAsync(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"origin/HEAD\"], { cwd });\n const abbrevRef = result.stdout.trim();\n if (abbrevRef.length > 0 && abbrevRef !== \"origin/HEAD\") {\n return abbrevRef;\n }\n } catch {\n throw wrapGitError(\"resolve origin default branch\");\n }\n\n throw new WorkspaceError(\"GIT_ERROR\", \"Could not resolve origin default branch\");\n }\n}\n\nexport function createDefaultGitRunner(): GitRunner {\n return new ProcessGitRunner();\n}\n", "/** Canonical regex (case-insensitive UUID segment). */\nexport const STORY_BRANCH_PATTERN = /^story\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:-.+)?$/i;\n\nconst GIT_SHA_PATTERN = /^[0-9a-f]{40}$/i;\n\nconst REF_PREFIX_PATTERN = /^(?:refs\\/heads\\/|origin\\/)+/;\n\n/**\n * Parses a branch name `story/{uuid}` or `story/{uuid}-slug` into a canonical lowercase work item id.\n */\nexport function parseStoryBranchWorkItemId(branchName: string): string | null {\n const match = STORY_BRANCH_PATTERN.exec(branchName.trim());\n if (!match) {\n return null;\n }\n\n return match[1].toLowerCase();\n}\n\n/**\n * Parses a git ref (`refs/heads/story/...`, `origin/story/...`, or bare branch name).\n */\nexport function parseStoryBranchRef(ref: string): string | null {\n const normalizedRef = ref.trim().replace(REF_PREFIX_PATTERN, \"\");\n return parseStoryBranchWorkItemId(normalizedRef);\n}\n\n/** Returns true when `sha` is a full 40-character hexadecimal git commit id. */\nexport function isValidGitSha(sha: string): boolean {\n return GIT_SHA_PATTERN.test(sha.trim());\n}\n", "/** Matches `work-item:{uuid}`; UUID segment is case-insensitive. */\nconst WORK_ITEM_COMMIT_TAG_PATTERN = /work-item:\\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi;\n\n/**\n * Formats a canonical work-item tag for git commit messages.\n */\nexport function formatWorkItemCommitTag(workItemId: string): string {\n return `work-item:${workItemId.trim().toLowerCase()}`;\n}\n\n/**\n * Parses all distinct work-item ids from a commit message (subject + body).\n * Returns canonical lowercase UUIDs in first-seen order.\n */\nexport function parseWorkItemIdsFromCommitMessage(message: string): string[] {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n for (const match of message.matchAll(WORK_ITEM_COMMIT_TAG_PATTERN)) {\n const id = match[1].toLowerCase();\n if (!seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n\n return ids;\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { syncProjectSubagents } from \"../subagents/sync-project-subagents.js\";\nimport { resolveWorkspaceRoot } from \"../workspace/resolve-workspace-root.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerSyncProjectSubagentsTools(\n server: McpServer,\n client: RestClient,\n config: McpServerConfig\n): void {\n server.registerTool(\n \"sync_project_subagents\",\n {\n description:\n \"Sync project custom subagent definitions from the API to {workspaceRoot}/.cursor/agents/{slug}.md so the IDE Task tool can resolve custom slugs. Idempotent overwrite. Requires MCP API token with write scope.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to workspace root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ projectId, workspaceRoot }) =>\n runTool(async () => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return syncProjectSubagents(client, {\n projectId,\n workspaceRoot: resolvedWorkspaceRoot\n });\n })\n );\n}\n", "import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport {\n buildSubagentFileContentFromBody,\n PROJECT_SUBAGENTS_ROUTES,\n type SubagentListResponse,\n type SubagentResponse\n} from \"@task-boards/shared\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nconst SAFE_SUBAGENT_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\nconst MAX_SUBAGENT_SLUG_LENGTH = 64;\n\nexport interface SyncProjectSubagentsParams {\n projectId: string;\n workspaceRoot: string;\n}\n\nexport interface SyncProjectSubagentsResult {\n synced: string[];\n skipped: string[];\n directory: string;\n}\n\nfunction isSyncableSlug(slug: string): boolean {\n const trimmed = slug.trim();\n return trimmed.length > 0 && trimmed.length <= MAX_SUBAGENT_SLUG_LENGTH && SAFE_SUBAGENT_SLUG_PATTERN.test(trimmed);\n}\n\nfunction buildFileContent(subagent: SubagentResponse): string {\n return buildSubagentFileContentFromBody({\n slug: subagent.slug,\n description: subagent.description,\n bodyMarkdown: subagent.bodyMarkdown\n });\n}\n\nexport async function syncProjectSubagents(\n client: RestClient,\n params: SyncProjectSubagentsParams\n): Promise<SyncProjectSubagentsResult> {\n const { projectId, workspaceRoot } = params;\n const listResponse = await client.get<SubagentListResponse>(PROJECT_SUBAGENTS_ROUTES.listSubagents(projectId));\n const directory = join(workspaceRoot, \".cursor\", \"agents\");\n\n mkdirSync(directory, { recursive: true });\n\n const synced: string[] = [];\n const skipped: string[] = [];\n\n for (const subagent of listResponse.items) {\n if (!isSyncableSlug(subagent.slug)) {\n skipped.push(subagent.slug);\n continue;\n }\n\n const filePath = join(directory, `${subagent.slug}.md`);\n writeFileSync(filePath, buildFileContent(subagent), \"utf8\");\n synced.push(subagent.slug);\n }\n\n return { synced, skipped, directory };\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { SUBAGENT_ROLE } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { PRIORITY } from \"@task-boards/api/enums/priority.enum\";\nimport { WORK_ITEM_TYPE } from \"@task-boards/api/enums/work-item-type.enum\";\nimport { WORK_ITEMS_ROUTES } from \"@task-boards/api/work-items/work-items.api\";\nimport {\n WORK_ITEMS_SEARCH_MAX_QUERY_LENGTH,\n WORK_ITEMS_SEARCH_MIN_QUERY_LENGTH\n} from \"@task-boards/api/work-items/work-items.consts\";\nimport type {\n CreateWorkItemRequest,\n DeleteWorkItemPreviewResponse,\n DeleteWorkItemRequest,\n MoveWorkItemRequest,\n UpdateWorkItemRequest,\n WorkItemListResponse,\n WorkItemResponse\n} from \"@task-boards/api/work-items/work-items.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nconst workItemTypeValues = Object.values(WORK_ITEM_TYPE) as [string, ...string[]];\nconst priorityValues = Object.values(PRIORITY) as [string, ...string[]];\nconst subagentRoleValues = Object.values(SUBAGENT_ROLE) as [string, ...string[]];\n\nexport async function searchWorkItems(\n client: RestClient,\n projectId: string,\n query: string\n): Promise<WorkItemListResponse> {\n const q = query.trim();\n return client.get<WorkItemListResponse>(WORK_ITEMS_ROUTES.listWorkItems(projectId), { q });\n}\n\nexport async function getWorkItemDeletePreview(\n client: RestClient,\n workItemId: string\n): Promise<DeleteWorkItemPreviewResponse> {\n return client.get<DeleteWorkItemPreviewResponse>(WORK_ITEMS_ROUTES.getDeletePreview(workItemId));\n}\n\nexport async function deleteWorkItem(client: RestClient, workItemId: string): Promise<void> {\n const body: DeleteWorkItemRequest = { confirmCascade: false };\n await client.delete(WORK_ITEMS_ROUTES.deleteWorkItem(workItemId), body);\n}\n\nexport function registerWorkItemTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_work_items\",\n {\n description: \"List work items for a project.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n type: z.enum(workItemTypeValues).optional().describe(\"Filter by work item type\"),\n columnId: z.string().uuid().optional().describe(\"Filter by board column id\"),\n parentId: z.string().uuid().nullable().optional().describe(\"Filter by parent work item id\")\n }\n },\n async ({ projectId, type, columnId, parentId }) =>\n runTool(async () => {\n const params: Record<string, string | undefined> = {};\n if (type !== undefined) {\n params.type = type;\n }\n if (columnId !== undefined) {\n params.columnId = columnId;\n }\n if (parentId !== undefined && parentId !== null) {\n params.parentId = parentId;\n }\n return client.get<WorkItemListResponse>(WORK_ITEMS_ROUTES.listWorkItems(projectId), params);\n })\n );\n\n server.registerTool(\n \"search_work_items\",\n {\n description: \"Search work items by query string (title, description, acceptance criteria, display key).\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n query: z\n .string()\n .min(WORK_ITEMS_SEARCH_MIN_QUERY_LENGTH)\n .max(WORK_ITEMS_SEARCH_MAX_QUERY_LENGTH)\n .describe(\"Search query\")\n }\n },\n async ({ projectId, query }) => runTool(async () => searchWorkItems(client, projectId, query))\n );\n\n server.registerTool(\n \"get_work_item\",\n {\n description: \"Get a work item by id.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) =>\n runTool(async () => client.get<WorkItemResponse>(WORK_ITEMS_ROUTES.getWorkItem(workItemId)))\n );\n\n server.registerTool(\n \"create_work_item\",\n {\n description:\n \"Create a work item under a project. MCP/automation attributes creator and default assignee to the \u00AB\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\u00BB service user (UserKind.SERVICE) unless assigneeUserId is set. The AI orchestrator processes STORY items only when assignee is that service user. Priority defaults to LOW when omitted.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n type: z.enum(workItemTypeValues).describe(\"Work item type\"),\n title: z.string().min(1).max(512).describe(\"Work item title\"),\n parentId: z.string().uuid().nullable().optional().describe(\"Parent work item id\"),\n description: z.string().nullable().optional().describe(\"Work item description\"),\n acceptanceCriteria: z.string().nullable().optional().describe(\"Acceptance criteria\"),\n priority: z\n .enum(priorityValues)\n .nullable()\n .optional()\n .describe(\"Work item priority; defaults to LOW when omitted or null\"),\n storyPoints: z\n .number()\n .int()\n .min(0)\n .max(999)\n .nullable()\n .optional()\n .describe(\"Story points (EPIC/STORY only). Required when project estimationRequired and mode is storyPoints\"),\n estimate: z\n .string()\n .nullable()\n .optional()\n .describe(\n \"Estimate in hours as decimal string (EPIC/STORY only). Required when estimationRequired and mode is estimate\"\n ),\n assigneeUserId: z\n .string()\n .uuid()\n .nullable()\n .optional()\n .describe(\n \"Project member user id; defaults to creator (human) or \u00AB\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\u00BB service user (MCP) when omitted\"\n ),\n labelIds: z\n .array(z.string().uuid())\n .max(10)\n .optional()\n .describe(\"Up to 10 project label ids to attach on create\")\n }\n },\n async ({\n projectId,\n type,\n title,\n parentId,\n description,\n acceptanceCriteria,\n priority,\n storyPoints,\n estimate,\n assigneeUserId,\n labelIds\n }) =>\n runTool(async () => {\n const body: CreateWorkItemRequest = {\n type: type as CreateWorkItemRequest[\"type\"],\n title,\n parentId,\n description,\n acceptanceCriteria,\n priority: priority as CreateWorkItemRequest[\"priority\"],\n storyPoints,\n estimate,\n assigneeUserId,\n labelIds\n };\n return client.post<WorkItemResponse>(WORK_ITEMS_ROUTES.createWorkItem(projectId), body);\n })\n );\n\n server.registerTool(\n \"update_work_item\",\n {\n description: \"Update work item fields (fetches current version first).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n title: z.string().min(1).max(512).optional().describe(\"Updated title\"),\n description: z.string().nullable().optional().describe(\"Updated description\"),\n acceptanceCriteria: z.string().nullable().optional().describe(\"Updated acceptance criteria\"),\n priority: z.enum(priorityValues).nullable().optional().describe(\"Updated priority\"),\n assignedAgentRole: z.enum(subagentRoleValues).nullable().optional().describe(\"Assigned subagent role\"),\n parentId: z.string().uuid().nullable().optional().describe(\"Parent work item id (Epic for Story)\"),\n storyPoints: z.number().int().min(0).max(999).nullable().optional().describe(\"Story points (EPIC/STORY only)\"),\n estimate: z.string().nullable().optional().describe(\"Estimate in hours as decimal string (EPIC/STORY only)\"),\n assigneeUserId: z\n .string()\n .uuid()\n .nullable()\n .optional()\n .describe(\n \"Project member user id assignee; set to \u00AB\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\u00BB (SERVICE user) for AI orchestrator to process the STORY. Changing assignee from SERVICE to a human cancels pending agent runs for that work item.\"\n ),\n labelIds: z.array(z.string().uuid()).max(10).optional().describe(\"Replace work item labels (up to 10)\")\n }\n },\n async ({\n workItemId,\n title,\n description,\n acceptanceCriteria,\n priority,\n assignedAgentRole,\n parentId,\n storyPoints,\n estimate,\n assigneeUserId,\n labelIds\n }) =>\n runTool(async () => {\n const current = await client.get<WorkItemResponse>(WORK_ITEMS_ROUTES.getWorkItem(workItemId));\n const body: UpdateWorkItemRequest = {\n title,\n description,\n acceptanceCriteria,\n priority: priority as UpdateWorkItemRequest[\"priority\"],\n assignedAgentRole: assignedAgentRole as UpdateWorkItemRequest[\"assignedAgentRole\"],\n parentId,\n storyPoints,\n estimate,\n assigneeUserId,\n labelIds,\n version: current.version\n };\n return client.patch<WorkItemResponse>(WORK_ITEMS_ROUTES.updateWorkItem(workItemId), body);\n })\n );\n\n server.registerTool(\n \"move_work_item\",\n {\n description: \"Move a work item to another board column (fetches current version first).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n columnId: z.string().uuid().describe(\"Target column UUID\")\n }\n },\n async ({ workItemId, columnId }) =>\n runTool(async () => {\n const current = await client.get<WorkItemResponse>(WORK_ITEMS_ROUTES.getWorkItem(workItemId));\n const body: MoveWorkItemRequest = {\n columnId,\n version: current.version\n };\n return client.post<WorkItemResponse>(WORK_ITEMS_ROUTES.moveWorkItem(workItemId), body);\n })\n );\n\n server.registerTool(\n \"get_work_item_delete_preview\",\n {\n description:\n \"Preview hard-delete impact for a work item (cascade counts and eligibility). MCP may delete SUBTASK items only.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) => runTool(async () => getWorkItemDeletePreview(client, workItemId))\n );\n\n server.registerTool(\n \"delete_work_item\",\n {\n description:\n \"Hard-delete a SUBTASK work item (leaf delete with confirmCascade false). EPIC/STORY deletes are human-only.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) =>\n runTool(async () => {\n await deleteWorkItem(client, workItemId);\n return { workItemId, deleted: true };\n })\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { registerAgentRunTools } from \"./agent-runs.js\";\nimport { registerOrchestratorTools } from \"./orchestrator.js\";\nimport { registerAttachmentTools } from \"./attachments.js\";\nimport { registerBoardTools } from \"./board.js\";\nimport { registerCommentTools } from \"./comments.js\";\nimport { registerLabelTools } from \"./labels.js\";\nimport { registerProjectTools } from \"./projects.js\";\nimport { registerResolveProjectTools } from \"./resolve-project.js\";\nimport { registerSyncGitReleasesTools } from \"./sync-git-releases.js\";\nimport { registerSyncProjectSubagentsTools } from \"./sync-project-subagents.js\";\nimport { registerWorkItemTools } from \"./work-items.js\";\n\nexport function registerTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n registerProjectTools(server, client);\n registerResolveProjectTools(server, client, config);\n registerWorkItemTools(server, client);\n registerCommentTools(server, client);\n registerLabelTools(server, client);\n registerAttachmentTools(server, client, config);\n registerBoardTools(server, client);\n registerAgentRunTools(server, client);\n registerOrchestratorTools(server, client, config);\n registerSyncGitReleasesTools(server, client, config);\n registerSyncProjectSubagentsTools(server, client, config);\n}\n", "#!/usr/bin/env node\nimport { main } from \"./index.js\";\n\nmain().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : \"Failed to start MCP server\";\n console.error(message);\n process.exit(1);\n});\n"],
5
- "mappings": "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",
6
- "names": ["SubscriptionTier", "SystemRole", "ProjectMemberRole", "StaffCapability", "StaffRole", "UserKind", "SubscriptionSource", "SubscriptionAuditAction", "isValidGitSha", "GIT_SHA_PATTERN", "parseWorkItemIdsFromCommitMessage", "WORK_ITEM_COMMIT_TAG_PATTERN", "slug", "transition", "MAX_SUBAGENT_SLUG_LENGTH", "buildSubagentFileContentFromBody", "isBlockedMcpAttachmentFileName", "sanitizeMcpErrorMessage", "sanitizeMcpToolResult", "import_agent_runs", "import_agent_run_status", "import_agent_run_status", "import_shared", "import_agent_run_status", "resolve", "remainingMs", "z", "existsSync", "readFileSync", "join", "existsSync", "join", "TASK_BOARDS_FILE", "existsSync", "join", "z", "import_shared", "existsSync", "z", "basename", "dirname", "resolve", "existsSync", "readFileSync", "statSync", "basename", "isAbsolute", "relative", "resolve", "resolve", "isAbsolute", "relative", "basename", "existsSync", "statSync", "readFileSync", "existsSync", "z", "z", "z", "z", "z", "z", "z", "import_subagent_role", "import_projects", "z", "z", "z", "z", "z", "z", "z", "import_shared", "join", "z", "import_subagent_role", "import_work_items", "z", "subagentRoleValues", "z", "require"]
3
+ "sources": ["../../api/src/agent-runs/agent-runs.api.ts", "../../api/src/api-prefix.ts", "../../api/build/api-routes.js", "../../api/src/enums/work-item-type.enum.ts", "../../api/src/enums/subagent-role.enum.ts", "../../api/src/enums/agent-role.enum.ts", "../../api/src/enums/agent-run-outcome.enum.ts", "../../api/src/enums/workflow-phase.enum.ts", "../../api/src/enums/agent-run-status.enum.ts", "../../api/src/enums/board-preset-code.enum.ts", "../../api/src/enums/changed-by-type.enum.ts", "../../api/src/enums/estimation-mode.enum.ts", "../../api/src/enums/task-card-estimation-display.enum.ts", "../../api/src/enums/priority.enum.ts", "../../api/src/enums/label-color.enum.ts", "../../api/src/enums/sprint-status.enum.ts", "../../api/src/enums/sprint-scope-mutation.enum.ts", "../../api/src/labels/labels.api.ts", "../../api/build/labels/labels.types.js", "../../api/src/labels/index.ts", "../../api/src/sprints/sprints.api.ts", "../../api/src/sprints/sprints.types.ts", "../../api/src/sprints/index.ts", "../../api/src/project-subagents/project-subagents.api.ts", "../../api/src/project-subagents/project-subagents.types.ts", "../../api/src/project-subagents/index.ts", "../../api/src/project-webhooks/project-webhooks.api.ts", "../../api/src/project-webhooks/project-webhooks.enums.ts", "../../api/build/project-webhooks/project-webhooks.types.js", "../../api/src/project-webhooks/index.ts", "../../api/src/boards/boards.api.ts", "../../api/src/boards/boards.consts.ts", "../../api/build/boards/boards.types.js", "../../api/build/types/wire-types.js", "../../api/build/types/pagination.types.js", "../../api/src/projects/projects.api.ts", "../../api/src/projects/projects.types.ts", "../../api/build/projects/project-binding.types.js", "../../api/src/work-items/work-items.api.ts", "../../api/src/work-items/work-items.consts.ts", "../../api/src/work-items/work-items.types.ts", "../../api/src/git-release/git-release.api.ts", "../../api/build/git-release/git-release.types.js", "../../api/src/git-release/index.ts", "../../api/src/attachments/attachments.api.ts", "../../api/src/attachments/index.ts", "../../api/src/comments/comments.api.ts", "../../api/src/comments/comments.types.ts", "../../api/src/comments/index.ts", "../../api/src/feedback/feedback.api.ts", "../../api/src/feedback/feedback.enum.ts", "../../api/build/feedback/feedback.types.js", "../../api/src/feedback/index.ts", "../../api/src/notifications/notifications.api.ts", "../../api/src/notifications/notifications.enum.ts", "../../api/build/notifications/notifications.types.js", "../../api/src/notifications/index.ts", "../../api/build/agent-runs/agent-runs.types.js", "../../api/src/index.ts", "../../shared/src/board-presets/init-board-preset-definitions.ts", "../../shared/src/board-presets/index.ts", "../../shared/src/internal/subscriptions/subscription-tier.enum.ts", "../../shared/src/subscriptions/init-pricing-plan-seeds.ts", "../../shared/src/subscriptions/index.ts", "../../shared/src/internal/auth/auth.api.ts", "../../shared/src/internal/auth/auth.types.ts", "../../shared/src/internal/auth/staff-capability.enum.ts", "../../shared/src/internal/auth/staff-role.enum.ts", "../../shared/src/internal/auth/staff-role-capabilities.const.ts", "../../shared/src/internal/auth/user-kind.enum.ts", "../../shared/src/internal/auth/service-user.consts.ts", "../../shared/src/internal/auth/password-policy.util.ts", "../../shared/src/internal/auth/index.ts", "../../shared/src/internal/account/account.api.ts", "../../shared/src/internal/account/index.ts", "../../shared/src/internal/api-tokens/api-tokens.api.ts", "../../shared/build/internal/api-tokens/api-tokens.types.js", "../../shared/src/internal/enums/api-token-scope.enum.ts", "../../shared/src/internal/members/members.api.ts", "../../shared/build/internal/members/members.types.js", "../../shared/src/internal/members/invitations.enums.ts", "../../shared/src/internal/imports/imports.api.ts", "../../shared/build/internal/imports/imports.types.js", "../../shared/src/internal/imports/imports.enums.ts", "../../shared/src/internal/imports/index.ts", "../../shared/src/internal/exceptions/exception-codes.ts", "../../shared/src/internal/health/health.api.ts", "../../shared/src/internal/health/health.types.ts", "../../shared/src/internal/health/index.ts", "../../shared/src/internal/admin/admin.api.ts", "../../shared/src/internal/admin/admin-notification-channel.enum.ts", "../../shared/src/internal/admin/admin-notification-settings.api.ts", "../../shared/src/internal/admin/admin-users.api.ts", "../../shared/src/internal/admin/admin-users.consts.ts", "../../shared/build/internal/admin/admin.types.js", "../../shared/src/internal/admin/index.ts", "../../shared/src/internal/payments/admin-payments.api.ts", "../../shared/src/internal/payments/index.ts", "../../shared/src/internal/subscriptions/subscription-source.enum.ts", "../../shared/src/internal/subscriptions/subscription-audit-action.enum.ts", "../../shared/src/internal/subscriptions/pricing-commitment-months.ts", "../../shared/src/internal/subscriptions/subscriptions.api.ts", "../../shared/src/internal/subscriptions/admin-subscriptions.api.ts", "../../shared/src/internal/subscriptions/index.ts", "../../shared/src/internal/index.ts", "../../shared/src/realtime/realtime.consts.ts", "../../shared/src/realtime/realtime.events.ts", "../../shared/build/realtime/realtime.types.js", "../../shared/src/work-items/work-items.display-key.util.ts", "../../shared/src/git/story-branch.util.ts", "../../shared/src/git/work-item-commit.util.ts", "../../shared/src/subagent-role/subagent-role-bindings.normalize.ts", "../../shared/src/subagent-role/subagent-role.util.ts", "../../shared/src/workflows/workflow-phase-subagent-role.map.ts", "../../shared/src/workflows/agentic-sdlc-phase-chain.ts", "../../shared/src/workflows/agentic-sdlc.workflow.ts", "../../shared/src/workflows/column-slug-mapping.ts", "../../shared/src/workflows/index.ts", "../../shared/src/subagent-role/subagent-role-labels.ts", "../../shared/src/subagent-role/subagent-role-bindings.util.ts", "../../shared/src/subagent-role/project-agents.util.ts", "../../shared/src/subagent-role/index.ts", "../../shared/src/subagent/builtin-ide-subagents.const.ts", "../../shared/src/subagent/subagent-llm-input.validator.ts", "../../shared/src/subagent/subagent-llm-output.validator.ts", "../../shared/src/subagent/subagent-preview-mode.enum.ts", "../../shared/src/subagent/slug.util.ts", "../../shared/src/subagent/subagent-definition.builder.ts", "../../shared/src/subagent/index.ts", "../../shared/src/tenancy/tenancy.consts.ts", "../../shared/src/tenancy/index.ts", "../../shared/src/mcp-data-protection/mcp-sensitive-data.util.ts", "../../shared/src/mcp-data-protection/sanitize-mcp-tool-result.util.ts", "../../shared/src/mcp-data-protection/index.ts", "../../shared/src/index.ts", "../src/orchestrator/orchestrator-transport.ts", "../src/tools/attachments.ts", "../src/attachments/detect-mime-type.ts", "../src/attachments/staging.util.ts", "../src/rest-client.ts", "../src/workspace/confine-file-path.ts", "../src/workspace/workspace-error.ts", "../src/workspace/resolve-workspace-root.ts", "../src/tools/tool-utils.ts", "../src/tool-runtime.ts", "../src/tools/comments.ts", "../src/subagents/sync-project-subagents.ts", "../src/tools/wait-for-agent-runs.ts", "../src/orchestrator/active-run-state.ts", "../src/workspace/parse-task-boards-yaml.ts", "../src/tools/orchestrator-attention.util.ts", "../src/attention/shell-category.util.ts", "../src/attention/attention-message.util.ts", "../src/attention/hook-payload.util.ts", "../src/attention/attention-cli.ts", "../src/config.ts", "../src/index.ts", "../src/tools/agent-runs.ts", "../src/tools/orchestrator-hints.ts", "../src/tools/orchestrator.ts", "../src/workspace/resolve-project.ts", "../src/workspace/normalize-token.ts", "../src/workspace/auto-match-project.ts", "../src/workspace/parse-ide-rules.ts", "../src/tools/board.ts", "../src/tools/labels.ts", "../src/tools/projects.ts", "../src/tools/resolve-project.ts", "../src/tools/sync-git-releases.ts", "../src/git/commit-release-sync.ts", "../src/git/git-runner.ts", "../src/git/story-branch.util.ts", "../src/git/work-item-commit.util.ts", "../src/tools/sync-project-subagents.ts", "../src/tools/work-items.ts", "../src/tools/index.ts", "../src/cli.ts"],
4
+ "sourcesContent": ["import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n AcknowledgeAgentRunRequest,\n AgentRunListResponse,\n AgentRunPageResponse,\n AgentRunResponse,\n ClaimAgentRunsRequest,\n ClaimAgentRunsResponse,\n CompleteAgentRunRequest,\n CompleteAgentRunResponse,\n ListAgentRunsQuery,\n SetAgentRunAttentionRequest\n} from \"./agent-runs.types\";\n\n/**\n * Agent run outbox REST API contract.\n */\nexport interface AgentRunsApi {\n /** List agent runs (e.g. MCP polling by status). Keyset-paginated. */\n listAgentRuns(query?: ListAgentRunsQuery): Promise<AgentRunPageResponse>;\n\n /** Atomically claim pending agent runs for orchestrator delivery (PENDING \u2192 DISPATCHED). */\n claimAgentRuns(body: ClaimAgentRunsRequest): Promise<ClaimAgentRunsResponse>;\n\n /** List agent runs for a work item. */\n listAgentRunsByWorkItem(workItemId: string): Promise<AgentRunListResponse>;\n\n /**\n * Retry a failed agent run: inserts a new PENDING attempt with fresh payload from the current work item.\n * The source run stays FAILED. Requires write access; blocked when an inflight run exists for the same role.\n */\n retryAgentRun(id: string): Promise<AgentRunResponse>;\n\n /** Acknowledge agent run delivery (MCP). */\n acknowledgeAgentRun(id: string, body?: AcknowledgeAgentRunRequest): Promise<AgentRunResponse>;\n\n /** Report or clear human-attention flag while a run is ACKNOWLEDGED (in-flight subagent). */\n setAgentRunAttention(id: string, body: SetAgentRunAttentionRequest): Promise<AgentRunResponse>;\n\n /**\n * Complete agent run work: apply optional work item patch, resolve workflow transition,\n * move work item to the next column, and mark the run COMPLETED (or FAILED).\n */\n completeAgentRun(id: string, body?: CompleteAgentRunRequest): Promise<CompleteAgentRunResponse>;\n}\n\nexport const AGENT_RUNS_PREFIX = \"/agent-runs\";\n\nexport const AGENT_RUNS_ROUTES: APIRoutes<AgentRunsApi> = {\n listAgentRuns: (): string => AGENT_RUNS_PREFIX,\n claimAgentRuns: (): string => `${AGENT_RUNS_PREFIX}/claim`,\n listAgentRunsByWorkItem: (workItemId: string): string => `/work-items/${workItemId}/agent-runs`,\n retryAgentRun: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/retry`,\n acknowledgeAgentRun: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/acknowledge`,\n setAgentRunAttention: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/attention`,\n completeAgentRun: (id: string): string => `${AGENT_RUNS_PREFIX}/${id}/complete`\n};\n", "/**\n * HTTP path segment after backend context.\n * Nest `setGlobalPrefix`, frontend `apiFetch`, and MCP `baseURL` all prepend this value.\n * `*_ROUTES` in `*.api.ts` return paths relative to this prefix (module segment only).\n */\nexport const API_V1_PREFIX = \"/api/v1\";\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=api-routes.js.map", "export const WORK_ITEM_TYPE = {\n EPIC: \"EPIC\",\n STORY: \"STORY\",\n SUBTASK: \"SUBTASK\"\n} as const;\n\nexport type WorkItemType = (typeof WORK_ITEM_TYPE)[keyof typeof WORK_ITEM_TYPE];\n", "export const SUBAGENT_ROLE = {\n PRODUCT: \"PRODUCT\",\n ARCHITECT: \"ARCHITECT\",\n ANALYST: \"ANALYST\",\n DESIGNER: \"DESIGNER\",\n FRONTEND_DEVELOPER: \"FRONTEND_DEVELOPER\",\n DEVELOPER: \"DEVELOPER\",\n QA: \"QA\",\n ORCHESTRATOR: \"ORCHESTRATOR\"\n} as const;\n\nexport type SubagentRole = (typeof SUBAGENT_ROLE)[keyof typeof SUBAGENT_ROLE];\n", "/** @deprecated Use SUBAGENT_ROLE and SubagentRole from subagent-role.enum */\nexport { SUBAGENT_ROLE as AGENT_ROLE, type SubagentRole as AgentRole } from \"./subagent-role.enum\";\n\nexport { SUBAGENT_ROLE, type SubagentRole } from \"./subagent-role.enum\";\n", "export const AGENT_RUN_OUTCOME = {\n DEFAULT: \"DEFAULT\",\n SKIP_DESIGN: \"SKIP_DESIGN\",\n SKIP_DEV: \"SKIP_DEV\",\n HAS_BUGS: \"HAS_BUGS\",\n NEEDS_CLARIFICATION: \"NEEDS_CLARIFICATION\",\n FAILED: \"FAILED\"\n} as const;\n\nexport type AgentRunOutcome = (typeof AGENT_RUN_OUTCOME)[keyof typeof AGENT_RUN_OUTCOME];\n", "export const WORKFLOW_PHASE = {\n PRODUCT: \"PRODUCT\",\n ANALYST: \"ANALYST\",\n ARCHITECT: \"ARCHITECT\",\n DESIGNER: \"DESIGNER\",\n DEVELOPMENT: \"DEVELOPMENT\"\n} as const;\n\nexport type WorkflowPhase = (typeof WORKFLOW_PHASE)[keyof typeof WORKFLOW_PHASE];\n", "export const AGENT_RUN_STATUS = {\n PENDING: \"PENDING\",\n DISPATCHED: \"DISPATCHED\",\n ACKNOWLEDGED: \"ACKNOWLEDGED\",\n COMPLETED: \"COMPLETED\",\n FAILED: \"FAILED\",\n SKIPPED: \"SKIPPED\",\n CANCELLED: \"CANCELLED\"\n} as const;\n\nexport type AgentRunStatus = (typeof AGENT_RUN_STATUS)[keyof typeof AGENT_RUN_STATUS];\n", "export const BOARD_PRESET_CODE = {\n KANBAN: \"KANBAN\",\n SCRUM: \"SCRUM\",\n AGENTIC_SDLC: \"AGENTIC_SDLC\"\n} as const;\n\nexport type BoardPresetCode = (typeof BOARD_PRESET_CODE)[keyof typeof BOARD_PRESET_CODE];\n", "export const CHANGED_BY_TYPE = {\n HUMAN: \"HUMAN\",\n AGENT: \"AGENT\",\n MCP: \"MCP\",\n GIT: \"GIT\"\n} as const;\n\nexport type ChangedByType = (typeof CHANGED_BY_TYPE)[keyof typeof CHANGED_BY_TYPE];\n", "export const ESTIMATION_MODE = {\n STORY_POINTS: \"storyPoints\",\n ESTIMATE: \"estimate\"\n} as const;\n\nexport type EstimationMode = (typeof ESTIMATION_MODE)[keyof typeof ESTIMATION_MODE];\n", "export const TASK_CARD_ESTIMATION_DISPLAY = {\n STORY_POINTS: \"storyPoints\",\n ESTIMATE: \"estimate\",\n NONE: \"none\"\n} as const;\n\nexport type TaskCardEstimationDisplay =\n (typeof TASK_CARD_ESTIMATION_DISPLAY)[keyof typeof TASK_CARD_ESTIMATION_DISPLAY];\n", "export const PRIORITY = {\n CRITICAL: \"CRITICAL\",\n HIGH: \"HIGH\",\n MEDIUM: \"MEDIUM\",\n LOW: \"LOW\"\n} as const;\n\nexport type Priority = (typeof PRIORITY)[keyof typeof PRIORITY];\n", "export const LABEL_COLOR = {\n GRAY: \"GRAY\",\n BLUE: \"BLUE\",\n GREEN: \"GREEN\",\n YELLOW: \"YELLOW\",\n ORANGE: \"ORANGE\",\n RED: \"RED\",\n PURPLE: \"PURPLE\",\n PINK: \"PINK\",\n TEAL: \"TEAL\",\n CYAN: \"CYAN\",\n BROWN: \"BROWN\",\n LIME: \"LIME\"\n} as const;\n\nexport type LabelColor = (typeof LABEL_COLOR)[keyof typeof LABEL_COLOR];\n", "export const SPRINT_STATUS = {\n PLANNED: \"PLANNED\",\n ACTIVE: \"ACTIVE\",\n CLOSED: \"CLOSED\"\n} as const;\n\nexport type SprintStatus = (typeof SPRINT_STATUS)[keyof typeof SPRINT_STATUS];\n", "export const SPRINT_SCOPE_MUTATION = {\n ADD: \"ADD\",\n REMOVE: \"REMOVE\"\n} as const;\n\nexport type SprintScopeMutation = (typeof SPRINT_SCOPE_MUTATION)[keyof typeof SPRINT_SCOPE_MUTATION];\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { CreateLabelRequest, LabelListResponse, LabelResponse, UpdateLabelRequest } from \"./labels.types\";\n\n/**\n * Project label definitions (CRUD).\n */\nexport interface LabelsApi {\n /** List labels for a project. */\n listLabels(projectId: string): Promise<LabelListResponse>;\n\n /** Create a label. Requires write access. */\n createLabel(projectId: string, body: CreateLabelRequest): Promise<LabelResponse>;\n\n /** Update a label. Requires write access. */\n updateLabel(projectId: string, labelId: string, body: UpdateLabelRequest): Promise<LabelResponse>;\n\n /** Delete a label and detach from work items. Requires write access. */\n deleteLabel(projectId: string, labelId: string): Promise<void>;\n}\n\nexport const LABELS_ROUTES: APIRoutes<LabelsApi> = {\n listLabels: (projectId: string): string => `/projects/${projectId}/labels`,\n createLabel: (projectId: string): string => `/projects/${projectId}/labels`,\n updateLabel: (projectId: string, labelId: string): string => `/projects/${projectId}/labels/${labelId}`,\n deleteLabel: (projectId: string, labelId: string): string => `/projects/${projectId}/labels/${labelId}`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=labels.types.js.map", "export * from \"./labels.api\";\nexport * from \"./labels.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateSprintRequest,\n SprintBurndownResponse,\n SprintDetailResponse,\n SprintListResponse,\n SprintResponse,\n SprintScopeMutationRequest,\n UpdateSprintRequest\n} from \"./sprints.types\";\n\n/**\n * Project sprint definitions (CRUD, activate, scope).\n */\nexport interface SprintsApi {\n /** List sprints for a project. */\n listSprints(projectId: string): Promise<SprintListResponse>;\n\n /** Create a sprint. Requires write access. */\n createSprint(projectId: string, body: CreateSprintRequest): Promise<SprintResponse>;\n\n /** Get sprint detail including scope work item ids. */\n getSprint(projectId: string, sprintId: string): Promise<SprintDetailResponse>;\n\n /** Update a sprint. Requires write access. */\n updateSprint(projectId: string, sprintId: string, body: UpdateSprintRequest): Promise<SprintResponse>;\n\n /** Delete a sprint. Requires write access. */\n deleteSprint(projectId: string, sprintId: string): Promise<void>;\n\n /** Activate sprint; closes previous ACTIVE sprint for the project. */\n activateSprint(projectId: string, sprintId: string): Promise<SprintResponse>;\n\n /** Add stories to sprint scope. */\n addSprintScope(projectId: string, sprintId: string, body: SprintScopeMutationRequest): Promise<SprintDetailResponse>;\n\n /** Remove stories from sprint scope. */\n removeSprintScope(\n projectId: string,\n sprintId: string,\n body: SprintScopeMutationRequest\n ): Promise<SprintDetailResponse>;\n\n /** Story-count burndown for the active sprint. */\n getActiveSprintBurndown(projectId: string): Promise<SprintBurndownResponse>;\n}\n\nexport const SPRINTS_ROUTES: APIRoutes<SprintsApi> = {\n listSprints: (projectId: string): string => `/projects/${projectId}/sprints`,\n createSprint: (projectId: string): string => `/projects/${projectId}/sprints`,\n getSprint: (projectId: string, sprintId: string): string => `/projects/${projectId}/sprints/${sprintId}`,\n updateSprint: (projectId: string, sprintId: string): string => `/projects/${projectId}/sprints/${sprintId}`,\n deleteSprint: (projectId: string, sprintId: string): string => `/projects/${projectId}/sprints/${sprintId}`,\n activateSprint: (projectId: string, sprintId: string): string =>\n `/projects/${projectId}/sprints/${sprintId}/activate`,\n addSprintScope: (projectId: string, sprintId: string): string =>\n `/projects/${projectId}/sprints/${sprintId}/scope/add`,\n removeSprintScope: (projectId: string, sprintId: string): string =>\n `/projects/${projectId}/sprints/${sprintId}/scope/remove`,\n getActiveSprintBurndown: (projectId: string): string => `/projects/${projectId}/sprints/active/burndown`\n};\n", "import type { SprintStatus } from \"../enums/sprint-status.enum\";\nimport type { IsoDateTimeString, LocalDateString } from \"../types/wire-types\";\n\nexport interface SprintResponse {\n id: string;\n projectId: string;\n name: string;\n goal: string | null;\n startDate: LocalDateString;\n endDate: LocalDateString;\n status: SprintStatus;\n activatedAt: IsoDateTimeString | null;\n closedAt: IsoDateTimeString | null;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface SprintDetailResponse extends SprintResponse {\n /** Work item ids currently in sprint scope (STORY only). */\n scopeWorkItemIds: string[];\n}\n\nexport interface SprintListResponse {\n items: SprintResponse[];\n}\n\nexport interface CreateSprintRequest {\n name: string;\n startDate: LocalDateString;\n endDate: LocalDateString;\n goal?: string | null;\n}\n\nexport interface UpdateSprintRequest {\n name?: string;\n startDate?: LocalDateString;\n endDate?: LocalDateString;\n goal?: string | null;\n}\n\nexport interface SprintScopeMutationRequest {\n workItemIds: string[];\n}\n\nexport const BURNDOWN_METRIC = {\n STORY_COUNT: \"story_count\"\n} as const;\n\nexport type BurndownMetric = (typeof BURNDOWN_METRIC)[keyof typeof BURNDOWN_METRIC];\n\nexport interface BurndownPoint {\n date: LocalDateString;\n remaining: number;\n}\n\nexport interface SprintBurndownResponse {\n sprintId: string;\n sprintName: string;\n startDate: LocalDateString;\n endDate: LocalDateString;\n metric: BurndownMetric;\n todayRemaining: number;\n actualLine: BurndownPoint[];\n idealLine: BurndownPoint[];\n}\n", "export * from \"./sprints.api\";\nexport * from \"./sprints.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateSubagentRequest,\n PreviewSubagentRequest,\n PreviewSubagentResponse,\n SubagentListResponse,\n SubagentResponse,\n UpdateSubagentRequest\n} from \"./project-subagents.types\";\n\n/**\n * Project-scoped custom IDE subagent definitions (CRUD + preview).\n */\nexport interface ProjectSubagentsApi {\n /** List custom subagents for a project. */\n listSubagents(projectId: string): Promise<SubagentListResponse>;\n\n /** Preview slug and generated markdown without persisting. */\n previewSubagent(projectId: string, body: PreviewSubagentRequest): Promise<PreviewSubagentResponse>;\n\n /** Create a custom subagent. Requires write access. */\n createSubagent(projectId: string, body: CreateSubagentRequest): Promise<SubagentResponse>;\n\n /** Get a custom subagent by id. */\n getSubagent(projectId: string, subagentId: string): Promise<SubagentResponse>;\n\n /** Update a custom subagent. Slug is immutable. Requires write access. */\n updateSubagent(projectId: string, subagentId: string, body: UpdateSubagentRequest): Promise<SubagentResponse>;\n\n /** Delete a custom subagent. Blocked when slug is referenced in role bindings. Requires write access. */\n deleteSubagent(projectId: string, subagentId: string): Promise<void>;\n}\n\nexport const PROJECT_SUBAGENTS_ROUTES: APIRoutes<ProjectSubagentsApi> = {\n listSubagents: (projectId: string): string => `/projects/${projectId}/subagents`,\n previewSubagent: (projectId: string): string => `/projects/${projectId}/subagents/preview`,\n createSubagent: (projectId: string): string => `/projects/${projectId}/subagents`,\n getSubagent: (projectId: string, subagentId: string): string => `/projects/${projectId}/subagents/${subagentId}`,\n updateSubagent: (projectId: string, subagentId: string): string => `/projects/${projectId}/subagents/${subagentId}`,\n deleteSubagent: (projectId: string, subagentId: string): string => `/projects/${projectId}/subagents/${subagentId}`\n};\n", "import type { SubagentRole } from \"../enums/subagent-role.enum\";\nimport type { IsoDateTimeString } from \"../types/wire-types\";\n\nexport const SUBAGENT_PREVIEW_MODE = {\n TEMPLATE: \"TEMPLATE\",\n LLM: \"LLM\"\n} as const;\n\nexport type SubagentPreviewMode = (typeof SUBAGENT_PREVIEW_MODE)[keyof typeof SUBAGENT_PREVIEW_MODE];\n\nexport interface SubagentResponse {\n id: string;\n projectId: string;\n slug: string;\n name: string;\n description: string;\n bodyMarkdown: string;\n sourcePrompt: string | null;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface SubagentCapabilities {\n llmGenerationAvailable: boolean;\n}\n\nexport interface SubagentListResponse {\n items: SubagentResponse[];\n capabilities: SubagentCapabilities;\n}\n\nexport interface PreviewSubagentRequest {\n name: string;\n basePrompt: string;\n description?: string | null;\n /** Defaults to {@link SUBAGENT_PREVIEW_MODE.TEMPLATE}. */\n mode?: SubagentPreviewMode;\n}\n\nexport interface PreviewSubagentGenerationMeta {\n model: string;\n latencyMs: number;\n}\n\nexport interface PreviewSubagentResponse {\n slug: string;\n name: string;\n description: string;\n bodyMarkdown: string;\n /** Full file content for `.cursor/agents/<slug>.md`. */\n fileContent: string;\n mode: SubagentPreviewMode;\n generationMeta?: PreviewSubagentGenerationMeta;\n}\n\nexport interface CreateSubagentRequest {\n name: string;\n basePrompt: string;\n description?: string | null;\n /** Optional override of generated body; normally omitted. */\n bodyMarkdown?: string;\n}\n\nexport interface UpdateSubagentRequest {\n name?: string;\n description?: string | null;\n basePrompt?: string;\n bodyMarkdown?: string;\n}\n\nexport const SUBAGENT_DELETE_BLOCK_REASON = {\n IN_USE: \"IN_USE\",\n FORBIDDEN: \"FORBIDDEN\"\n} as const;\n\nexport type SubagentDeleteBlockReason =\n (typeof SUBAGENT_DELETE_BLOCK_REASON)[keyof typeof SUBAGENT_DELETE_BLOCK_REASON];\n\nexport interface SubagentDeleteBlockResponse {\n canDelete: false;\n blockReason: SubagentDeleteBlockReason;\n /** Roles referencing this slug when blockReason is IN_USE. */\n usedByRoles: SubagentRole[];\n}\n", "export * from \"./project-subagents.api\";\nexport * from \"./project-subagents.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n ProjectWebhookConfigResponse,\n TestProjectWebhookResponse,\n UpdateProjectWebhookConfigRequest\n} from \"./project-webhooks.types\";\n\n/**\n * Project-scoped outbound HTTPS webhook configuration (PRO+ OWNER, human session only).\n */\nexport interface ProjectWebhooksApi {\n getWebhookConfig(projectId: string): Promise<ProjectWebhookConfigResponse>;\n\n updateWebhookConfig(\n projectId: string,\n body: UpdateProjectWebhookConfigRequest\n ): Promise<ProjectWebhookConfigResponse>;\n\n testWebhook(projectId: string): Promise<TestProjectWebhookResponse>;\n}\n\nexport const PROJECT_WEBHOOKS_ROUTES: APIRoutes<ProjectWebhooksApi> = {\n getWebhookConfig: (projectId: string): string => `/projects/${projectId}/webhook-config`,\n updateWebhookConfig: (projectId: string): string => `/projects/${projectId}/webhook-config`,\n testWebhook: (projectId: string): string => `/projects/${projectId}/webhook-config/test`\n};\n", "export const WEBHOOK_EVENT_TYPE = {\n AGENT_RUN_COMPLETED: \"agent_run.completed\",\n WORK_ITEM_MOVED_TO_IN_AWAITING: \"work_item.moved_to_in_awaiting\",\n WEBHOOK_TEST: \"webhook.test\"\n} as const;\n\nexport type WebhookEventType = (typeof WEBHOOK_EVENT_TYPE)[keyof typeof WEBHOOK_EVENT_TYPE];\n\nexport const WEBHOOK_DELIVERY_STATUS = {\n PENDING: \"pending\",\n RETRY_SCHEDULED: \"retry_scheduled\",\n SUCCEEDED: \"succeeded\",\n FAILED_PERMANENT: \"failed_permanent\"\n} as const;\n\nexport type WebhookDeliveryStatus = (typeof WEBHOOK_DELIVERY_STATUS)[keyof typeof WEBHOOK_DELIVERY_STATUS];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=project-webhooks.types.js.map", "export * from \"./project-webhooks.api\";\nexport * from \"./project-webhooks.enums\";\nexport * from \"./project-webhooks.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n BoardPresetListResponse,\n BoardResponse,\n CreateBoardColumnRequest,\n CreateBoardColumnResponse,\n DeleteBoardColumnResponse,\n ReorderBoardColumnsRequest,\n ReorderBoardColumnsResponse\n} from \"./boards.types\";\n\n/**\n * Boards REST API contract.\n */\nexport interface BoardApi {\n /** Get board projection for a project (columns + on-board work items). */\n getBoard(projectId: string): Promise<BoardResponse>;\n\n /** List available board presets. */\n listBoardPresets(): Promise<BoardPresetListResponse>;\n\n /** Create custom column at end of board. OWNER only. */\n createColumn(projectId: string, body: CreateBoardColumnRequest): Promise<CreateBoardColumnResponse>;\n\n /** Delete custom column; stories migrate to backlog. OWNER only. */\n deleteColumn(projectId: string, columnId: string): Promise<DeleteBoardColumnResponse>;\n\n /** Reorder board columns. Non-VIEWER only; backlog must stay first. */\n reorderColumns(projectId: string, body: ReorderBoardColumnsRequest): Promise<ReorderBoardColumnsResponse>;\n}\n\nexport const BOARD_PRESETS_PREFIX = \"/board-presets\";\n\nexport const BOARDS_ROUTES: APIRoutes<BoardApi> = {\n getBoard: (projectId: string): string => `/projects/${projectId}/board`,\n listBoardPresets: (): string => BOARD_PRESETS_PREFIX,\n createColumn: (projectId: string): string => `/projects/${projectId}/board/columns`,\n deleteColumn: (projectId: string, columnId: string): string => `/projects/${projectId}/board/columns/${columnId}`,\n reorderColumns: (projectId: string): string => `/projects/${projectId}/board/columns/order`\n};\n", "export const AGENTIC_SDLC_PROTECTED_COLUMN_SLUGS = [\n \"backlog\",\n \"in-awaiting\",\n \"in-analysis\",\n \"in-development\",\n \"in-qa\",\n \"done\",\n \"released\"\n] as const;\n\nexport type AgenticSdlcProtectedColumnSlug = (typeof AGENTIC_SDLC_PROTECTED_COLUMN_SLUGS)[number];\n\nconst AGENTIC_SDLC_PROTECTED_COLUMN_SLUG_SET = new Set<string>(AGENTIC_SDLC_PROTECTED_COLUMN_SLUGS);\n\nexport const SPRINT_BACKLOG_COLUMN_SLUG = \"sprint-backlog\";\n\nexport const CUSTOM_COLUMN_SLUG_PREFIX = \"custom-\";\n\nexport const MAX_BOARD_COLUMNS = 30;\n\nexport const CUSTOM_COLUMN_NAME_MAX_LENGTH = 128;\n\nexport function isCustomColumnSlug(slug: string): boolean {\n return slug.startsWith(CUSTOM_COLUMN_SLUG_PREFIX);\n}\n\nexport function isProtectedColumnSlug(slug: string): boolean {\n return AGENTIC_SDLC_PROTECTED_COLUMN_SLUG_SET.has(slug);\n}\n\nexport function isDeletableColumnSlug(slug: string): boolean {\n return isCustomColumnSlug(slug) && !isProtectedColumnSlug(slug);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=boards.types.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=wire-types.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=pagination.types.js.map", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateProjectRequest,\n DeleteProjectPreviewResponse,\n DeleteProjectRequest,\n ListProjectsQuery,\n ProjectListResponse,\n ProjectResponse,\n UpdateProjectRequest\n} from \"./projects.types\";\n\n/**\n * Projects REST API contract.\n */\nexport interface ProjectsApi {\n /** List projects; defaults to non-archived when status is omitted. */\n listProjects(query?: ListProjectsQuery): Promise<ProjectListResponse>;\n\n /** Create a project and its board from the selected preset. */\n createProject(body: CreateProjectRequest): Promise<ProjectResponse>;\n\n /** Get a project by id. */\n getProject(id: string): Promise<ProjectResponse>;\n\n /** Update project metadata. */\n updateProject(id: string, body: UpdateProjectRequest): Promise<ProjectResponse>;\n\n /** Archive a project. Human-only; owner access required. Idempotent when already archived. */\n archiveProject(id: string): Promise<ProjectResponse>;\n\n /** Unarchive a project. Human-only; owner access required. Idempotent when already active. */\n unarchiveProject(id: string): Promise<ProjectResponse>;\n\n /** Preview hard-delete impact and eligibility. Human-only; owner access required. */\n getDeletePreview(id: string): Promise<DeleteProjectPreviewResponse>;\n\n /** Permanently delete an archived project. Human-only; owner access required. */\n deleteProject(id: string, body: DeleteProjectRequest): Promise<void>;\n}\n\nexport const PROJECTS_PREFIX = \"/projects\";\n\nexport const PROJECTS_ROUTES: APIRoutes<ProjectsApi> = {\n listProjects: (): string => PROJECTS_PREFIX,\n createProject: (): string => PROJECTS_PREFIX,\n getProject: (id: string): string => `${PROJECTS_PREFIX}/${id}`,\n updateProject: (id: string): string => `${PROJECTS_PREFIX}/${id}`,\n archiveProject: (id: string): string => `${PROJECTS_PREFIX}/${id}/archive`,\n unarchiveProject: (id: string): string => `${PROJECTS_PREFIX}/${id}/unarchive`,\n getDeletePreview: (id: string): string => `${PROJECTS_PREFIX}/${id}/delete-preview`,\n deleteProject: (id: string): string => `${PROJECTS_PREFIX}/${id}`\n};\n", "import type { BoardPresetCode } from \"../enums/board-preset-code.enum\";\nimport type { EstimationMode } from \"../enums/estimation-mode.enum\";\nimport type { SubagentRole } from \"../enums/subagent-role.enum\";\nimport type { TaskCardEstimationDisplay } from \"../enums/task-card-estimation-display.enum\";\nimport type { IsoDateTimeString } from \"../types/wire-types\";\n\n/** IDE subagent slug binding for a universal role; `enabled` defaults to true when omitted. */\nexport interface SubagentRoleBinding {\n slug: string;\n enabled: boolean;\n}\n\n/** Project-level map from universal subagent role to binding (slug + optional disable toggle). */\nexport type SubagentRoleBindings = Partial<Record<SubagentRole, SubagentRoleBinding>>;\n\n/** Subscription-gated features exposed on GET /projects/:id for UI gating. */\nexport interface ProjectCapabilities {\n workItemAttachmentsUploadEnabled: boolean;\n}\n\nexport interface ProjectResponse {\n id: string;\n name: string;\n key: string;\n description: string | null;\n presetCode: BoardPresetCode;\n /** Active estimation field for drawer validation (storyPoints | estimate). */\n estimationMode: EstimationMode;\n /** When true, active estimation field is required on EPIC/STORY create/update. */\n estimationRequired: boolean;\n /** Which estimation value to show on TaskCard (independent of estimationMode). */\n taskCardEstimationDisplay: TaskCardEstimationDisplay;\n /** IDE subagent slug + enabled flag per universal subagent role; empty object when unset. */\n subagentRoleBindings: SubagentRoleBindings;\n /** When true, AGENTIC_SDLC phase workflow and agent orchestration apply on this preset's physical columns. Always true for AGENTIC_SDLC preset. */\n agenticSdlcPhasesEnabled: boolean;\n /** When true, sprint planning, activation, and board sprint insights are available. */\n sprintsEnabled: boolean;\n archivedAt: IsoDateTimeString | null;\n /** True when project owner subscription overflow marks project read-only for all users. */\n subscriptionReadOnly?: boolean;\n /** Owner subscription capabilities for feature gating in project UI. */\n capabilities?: ProjectCapabilities;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface ProjectListResponse {\n items: ProjectResponse[];\n}\n\nexport interface CreateProjectRequest {\n name: string;\n key: string;\n description?: string | null;\n presetCode?: BoardPresetCode;\n}\n\nexport interface UpdateProjectRequest {\n name?: string;\n description?: string | null;\n estimationMode?: EstimationMode;\n estimationRequired?: boolean;\n taskCardEstimationDisplay?: TaskCardEstimationDisplay;\n /** Replace project subagent role bindings (slug + enabled per role). */\n subagentRoleBindings?: SubagentRoleBindings;\n /** Enable agentic SDLC phase orchestration on this preset's physical columns. Rejected when false on AGENTIC_SDLC preset. */\n agenticSdlcPhasesEnabled?: boolean;\n /** Enable sprint planning and activation for this project. */\n sprintsEnabled?: boolean;\n}\n\nexport type ProjectListStatus = \"active\" | \"archived\" | \"all\";\n\nexport interface ListProjectsQuery {\n status?: ProjectListStatus;\n}\n\n/** Entity counts included in project hard-delete preview. */\nexport interface ProjectDeleteCounts {\n workItemCount: number;\n memberCount: number;\n attachmentCount: number;\n}\n\nexport const PROJECT_DELETE_BLOCK_REASON = {\n NOT_ARCHIVED: \"NOT_ARCHIVED\",\n ACTIVE_AGENT_RUN: \"ACTIVE_AGENT_RUN\",\n FORBIDDEN: \"FORBIDDEN\"\n} as const;\n\nexport type ProjectDeleteBlockReason = (typeof PROJECT_DELETE_BLOCK_REASON)[keyof typeof PROJECT_DELETE_BLOCK_REASON];\n\nexport interface DeleteProjectPreviewResponse {\n projectId: string;\n name: string;\n key: string;\n counts: ProjectDeleteCounts;\n /** False when project is not archived or an agent run is active. */\n canDelete: boolean;\n blockReason: ProjectDeleteBlockReason | null;\n}\n\nexport interface DeleteProjectRequest {\n /** Must match project.key (case-insensitive) to confirm permanent deletion. */\n confirmKey: string;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=project-binding.types.js.map", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n CreateWorkItemRequest,\n DeleteWorkItemPreviewResponse,\n DeleteWorkItemRequest,\n ListWorkItemsQuery,\n MoveWorkItemRequest,\n UpdateWorkItemRequest,\n WorkItemListResponse,\n WorkItemResponse\n} from \"./work-items.types\";\n\n/**\n * Work items REST API contract.\n */\nexport interface WorkItemsApi {\n /** List work items for a project. */\n listWorkItems(projectId: string, query?: ListWorkItemsQuery): Promise<WorkItemListResponse>;\n\n /** Create a work item under a project. */\n createWorkItem(projectId: string, body: CreateWorkItemRequest): Promise<WorkItemResponse>;\n\n /** Get a work item by id. */\n getWorkItem(id: string): Promise<WorkItemResponse>;\n\n /** Update a work item. */\n updateWorkItem(id: string, body: UpdateWorkItemRequest): Promise<WorkItemResponse>;\n\n /** Move a work item to another board column (optimistic lock via version). */\n moveWorkItem(id: string, body: MoveWorkItemRequest): Promise<WorkItemResponse>;\n\n /** Preview cascade impact and delete eligibility. MCP: SUBTASK only; EPIC/STORY return canDelete false. */\n getDeletePreview(id: string): Promise<DeleteWorkItemPreviewResponse>;\n\n /** Hard-delete work item. MCP: SUBTASK only (confirmCascade false). Body required when cascade > 0. */\n deleteWorkItem(id: string, body: DeleteWorkItemRequest): Promise<void>;\n}\n\nexport const WORK_ITEMS_PREFIX = \"/work-items\";\n\nexport const WORK_ITEMS_ROUTES: APIRoutes<WorkItemsApi> = {\n listWorkItems: (projectId: string): string => `/projects/${projectId}/work-items`,\n createWorkItem: (projectId: string): string => `/projects/${projectId}/work-items`,\n getWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}`,\n updateWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}`,\n deleteWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}`,\n getDeletePreview: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}/delete-preview`,\n moveWorkItem: (id: string): string => `${WORK_ITEMS_PREFIX}/${id}/move`\n};\n", "export const WORK_ITEMS_SEARCH_MIN_QUERY_LENGTH = 2;\n\nexport const WORK_ITEMS_SEARCH_MAX_QUERY_LENGTH = 200;\n\nexport const WORK_ITEMS_SEARCH_AUTOCOMPLETE_LIMIT = 20;\n", "import type { SubagentRole } from \"../enums/subagent-role.enum\";\nimport type { Priority } from \"../enums/priority.enum\";\nimport type { WorkItemType } from \"../enums/work-item-type.enum\";\nimport type { WorkflowPhase } from \"../enums/workflow-phase.enum\";\nimport type { PaginatedResponse, PaginationQuery } from \"../types/pagination.types\";\nimport type { LabelSummary } from \"../labels/labels.types\";\nimport type { IsoDateTimeString } from \"../types/wire-types\";\n\n/** Counts of descendants that will be hard-deleted with the target item. */\nexport interface WorkItemDeleteCascadeCounts {\n /** Direct + nested STORY items (non-zero only when target is EPIC). */\n storyCount: number;\n /** Direct + nested SUBTASK items. */\n subtaskCount: number;\n /** storyCount + subtaskCount (excludes the target itself). */\n totalCount: number;\n}\n\nexport const WORK_ITEM_DELETE_BLOCK_REASON = {\n FORBIDDEN: \"FORBIDDEN\",\n ACTIVE_AGENT_RUN: \"ACTIVE_AGENT_RUN\",\n VIEWER: \"VIEWER\"\n} as const;\n\nexport type WorkItemDeleteBlockReason =\n (typeof WORK_ITEM_DELETE_BLOCK_REASON)[keyof typeof WORK_ITEM_DELETE_BLOCK_REASON];\n\nexport interface DeleteWorkItemPreviewResponse {\n workItemId: string;\n type: WorkItemType;\n title: string;\n cascade: WorkItemDeleteCascadeCounts;\n /** False when RBAC or active agent run blocks delete. */\n canDelete: boolean;\n /** Machine-readable block reason when canDelete is false. */\n blockReason: WorkItemDeleteBlockReason | null;\n}\n\nexport interface DeleteWorkItemRequest {\n /**\n * Required true when cascade.totalCount > 0 (from preview).\n * Ignored when deleting a leaf (SUBTASK or childless STORY/EPIC).\n */\n confirmCascade: boolean;\n}\n\nexport interface WorkItemResponse {\n id: string;\n /** Monotonic per-project sequence (1-based). */\n number: number;\n /** Human-readable key, e.g. \"TB-42\". */\n displayKey: string;\n projectId: string;\n parentId: string | null;\n type: WorkItemType;\n title: string;\n description: string | null;\n acceptanceCriteria: string | null;\n priority: Priority | null;\n columnId: string | null;\n columnName: string | null;\n /** Column the work item was in before moving to In Awaiting; null when not blocked. */\n blockedFromColumnId: string | null;\n blockedFromColumnName: string | null;\n /** Agent role active when blocked; used to resume workflow phase in in-analysis. */\n blockedFromAgentRole: SubagentRole | null;\n /**\n * Workflow phase within agent columns (PRODUCT | ANALYST | ARCHITECT | DESIGNER | DEVELOPMENT).\n * Null when phase does not apply.\n */\n workflowPhase: WorkflowPhase | null;\n /** Whether DESIGNER phase is required before development (set by architect). */\n designerRequired: boolean;\n /** When false, ANALYST may complete with SKIP_DEV to release without code. STORY only. */\n codeChangesRequired: boolean;\n /** Dev roles still awaiting completion during DEVELOPMENT phase (parallel runs). */\n pendingDevRoles: SubagentRole[];\n assignedAgentRole: SubagentRole | null;\n version: number;\n boardPosition: number | null;\n /** ISO-8601 instant; set on first transition to Released (git or manual). */\n releasedAt: IsoDateTimeString | null;\n /** Full git commit SHA (40 hex); set only by git release path. */\n releaseCommitSha: string | null;\n /** Human creator; null for MCP-created or legacy rows. */\n createdByUserId: string | null;\n /** Human assignee; null when unassigned or MCP-created without assignee. */\n assigneeUserId: string | null;\n /** Story points; EPIC/STORY only \u2014 always null for SUBTASK. */\n storyPoints: number | null;\n /** Estimate in hours (decimal string); EPIC/STORY only \u2014 always null for SUBTASK. */\n estimate: string | null;\n labels: LabelSummary[];\n /** True when the work item is in the active sprint scope; false otherwise. */\n inActiveSprintScope: boolean;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport type WorkItemListResponse = PaginatedResponse<WorkItemResponse>;\n\nexport interface CreateWorkItemRequest {\n type: WorkItemType;\n title: string;\n description?: string | null;\n acceptanceCriteria?: string | null;\n /**\n * Work item priority. Omitted or null on create defaults to LOW on the server.\n */\n priority?: Priority | null;\n parentId?: string | null;\n /** EPIC/STORY only; ignored with 422 for SUBTASK. */\n storyPoints?: number | null;\n /** Hours as decimal string; EPIC/STORY only; ignored with 422 for SUBTASK. */\n estimate?: string | null;\n /** Project member user id; defaults to creator on human create when omitted. */\n assigneeUserId?: string | null;\n /** Up to 10 project label ids to attach on create. */\n labelIds?: string[];\n}\n\nexport interface UpdateWorkItemRequest {\n title?: string;\n description?: string | null;\n acceptanceCriteria?: string | null;\n priority?: Priority | null;\n assignedAgentRole?: SubagentRole | null;\n parentId?: string | null;\n storyPoints?: number | null;\n estimate?: string | null;\n assigneeUserId?: string | null;\n /** Replace work item labels (up to 10). Omitted to leave labels unchanged. */\n labelIds?: string[];\n /** STORY only; when false enables ANALYST SKIP_DEV to released without git. */\n codeChangesRequired?: boolean;\n /** Optimistic-lock version of the card; the client sends the current known version. */\n version: number;\n}\n\nexport interface ListWorkItemsQuery extends PaginationQuery {\n type?: WorkItemType;\n parentId?: string | null;\n columnId?: string;\n /** Project-scoped full-text search (title, description, acceptance criteria, display key). */\n q?: string;\n}\n\nexport interface MoveWorkItemRequest {\n columnId: string;\n /**\n * Target 0-based ordinal index among STORY work items in `columnId`.\n * Omitted when moving to another column without a specific position (append at end).\n * Used for same-column reorder and precise cross-column placement.\n */\n boardPosition?: number;\n version: number;\n}\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { SyncGitReleasesRequest, SyncGitReleasesResponse } from \"./git-release.types\";\n\n/**\n * Git-driven Done to Released REST API contract.\n */\nexport interface GitReleaseApi {\n /** Idempotent bulk release by git push metadata (partial success allowed). */\n syncGitReleases(projectId: string, body: SyncGitReleasesRequest): Promise<SyncGitReleasesResponse>;\n}\n\nexport const GIT_RELEASE_ROUTES: APIRoutes<GitReleaseApi> = {\n syncGitReleases: (projectId: string): string => `/projects/${projectId}/git-releases/sync`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=git-release.types.js.map", "export * from \"./git-release.api\";\nexport * from \"./git-release.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { AttachmentListResponse, AttachmentResponse } from \"./attachments.types\";\n\n/**\n * Work item attachments REST API contract.\n */\nexport interface AttachmentsApi {\n /** List attachments for a work item. */\n listAttachments(workItemId: string): Promise<AttachmentListResponse>;\n\n /** Upload an attachment to a work item (multipart field \"file\"). */\n uploadAttachment(workItemId: string, file: File): Promise<AttachmentResponse>;\n\n /** Download attachment binary by id. */\n downloadAttachment(workItemId: string, attachmentId: string): Promise<Blob>;\n\n /** Delete an attachment by id. */\n deleteAttachment(workItemId: string, attachmentId: string): Promise<void>;\n}\n\nexport const ATTACHMENTS_ROUTES: APIRoutes<AttachmentsApi> = {\n listAttachments: (workItemId: string): string => `/work-items/${workItemId}/attachments`,\n uploadAttachment: (workItemId: string): string => `/work-items/${workItemId}/attachments`,\n downloadAttachment: (workItemId: string, attachmentId: string): string =>\n `/work-items/${workItemId}/attachments/${attachmentId}/download`,\n deleteAttachment: (workItemId: string, attachmentId: string): string =>\n `/work-items/${workItemId}/attachments/${attachmentId}`\n};\n", "export type { AttachmentsApi } from \"./attachments.api\";\nexport { ATTACHMENTS_ROUTES } from \"./attachments.api\";\nexport type { AttachmentListResponse, AttachmentResponse, AttachmentUploaderResponse } from \"./attachments.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type { CommentListResponse, CommentResponse, CreateCommentRequest } from \"./comments.types\";\n\n/**\n * Work item comments REST API contract.\n */\nexport interface CommentsApi {\n /** List comments for a work item (newest last). */\n listComments(workItemId: string): Promise<CommentListResponse>;\n\n /** Create a comment on a work item. */\n createComment(workItemId: string, body: CreateCommentRequest): Promise<CommentResponse>;\n\n /** Delete a comment by id. */\n deleteComment(workItemId: string, commentId: string): Promise<void>;\n}\n\nexport const COMMENTS_ROUTES: APIRoutes<CommentsApi> = {\n listComments: (workItemId: string): string => `/work-items/${workItemId}/comments`,\n createComment: (workItemId: string): string => `/work-items/${workItemId}/comments`,\n deleteComment: (workItemId: string, commentId: string): string => `/work-items/${workItemId}/comments/${commentId}`\n};\n", "import type { IsoDateTimeString } from \"../types/wire-types\";\n\nexport const COMMENT_AUTHOR_TYPE = {\n HUMAN: \"HUMAN\",\n MCP: \"MCP\"\n} as const;\n\nexport type CommentAuthorType = (typeof COMMENT_AUTHOR_TYPE)[keyof typeof COMMENT_AUTHOR_TYPE];\n\nexport interface CommentAuthorResponse {\n type: CommentAuthorType;\n userId: string | null;\n displayName: string | null;\n apiTokenId: string | null;\n}\n\nexport interface CommentResponse {\n id: string;\n workItemId: string;\n body: string;\n author: CommentAuthorResponse;\n createdAt: IsoDateTimeString;\n updatedAt: IsoDateTimeString;\n}\n\nexport interface CommentListResponse {\n items: CommentResponse[];\n}\n\nexport interface CreateCommentRequest {\n body: string;\n}\n", "export type { CommentsApi } from \"./comments.api\";\nexport { COMMENTS_ROUTES } from \"./comments.api\";\nexport type {\n CommentAuthorResponse,\n CommentAuthorType,\n CommentListResponse,\n CommentResponse,\n CreateCommentRequest\n} from \"./comments.types\";\nexport { COMMENT_AUTHOR_TYPE } from \"./comments.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n FeedbackListResponse,\n FeedbackMarkReadResponse,\n FeedbackResponse,\n FeedbackUnreadSummaryResponse,\n ListFeedbackQuery,\n SubmitFeedbackRequest\n} from \"./feedback.types\";\n\n/**\n * User feedback REST API (separate from work-item comments).\n */\nexport interface FeedbackApi {\n /** Submit product feedback (human session only). */\n submitFeedback(body: SubmitFeedbackRequest): Promise<FeedbackResponse>;\n\n /** List feedback entries for system admins or staff with FEEDBACK_READ capability. */\n listFeedback(query?: ListFeedbackQuery): Promise<FeedbackListResponse>;\n\n /** Whether the current user has unread feedback in their tenant. */\n getUnreadSummary(): Promise<FeedbackUnreadSummaryResponse>;\n\n /** Mark all current feedback as read for the current user. */\n markFeedbackRead(): Promise<FeedbackMarkReadResponse>;\n\n /** Get a single feedback entry by id (system admins or staff with FEEDBACK_READ capability). */\n getFeedback(id: string): Promise<FeedbackResponse>;\n}\n\nexport const FEEDBACK_PREFIX = \"/feedback\";\n\nexport const FEEDBACK_ADMIN_PREFIX = \"/admin/feedback\";\n\nexport const FEEDBACK_ROUTES: APIRoutes<FeedbackApi> = {\n submitFeedback: (): string => FEEDBACK_PREFIX,\n listFeedback: (): string => FEEDBACK_ADMIN_PREFIX,\n getUnreadSummary: (): string => `${FEEDBACK_ADMIN_PREFIX}/unread-summary`,\n markFeedbackRead: (): string => `${FEEDBACK_ADMIN_PREFIX}/mark-read`,\n getFeedback: (id: string): string => `${FEEDBACK_ADMIN_PREFIX}/${id}`\n};\n", "export const FEEDBACK_TYPE = {\n BUG: \"BUG\",\n IMPROVEMENT: \"IMPROVEMENT\",\n QUESTION: \"QUESTION\",\n OTHER: \"OTHER\"\n} as const;\n\nexport type FeedbackType = (typeof FEEDBACK_TYPE)[keyof typeof FEEDBACK_TYPE];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=feedback.types.js.map", "export * from \"./feedback.api\";\nexport * from \"./feedback.enum\";\nexport * from \"./feedback.types\";\n", "import type { APIRoutes } from \"../api-routes\";\n\nimport type {\n ListNotificationsQuery,\n NotificationListResponse,\n NotificationMarkAllReadResponse,\n NotificationMarkReadResponse,\n NotificationUnreadCountResponse\n} from \"./notifications.types\";\n\n/**\n * In-app notification inbox REST API (human session only).\n */\nexport interface NotificationsApi {\n /** List notifications for the current user (keyset-paginated). */\n listNotifications(query?: ListNotificationsQuery): Promise<NotificationListResponse>;\n\n /** Count unread notifications for the current user. */\n getUnreadCount(query?: Pick<ListNotificationsQuery, \"projectId\">): Promise<NotificationUnreadCountResponse>;\n\n /** Mark a single notification as read. */\n markNotificationRead(id: string): Promise<NotificationMarkReadResponse>;\n\n /** Mark all unread notifications as read for the current user. */\n markAllNotificationsRead(query?: Pick<ListNotificationsQuery, \"projectId\">): Promise<NotificationMarkAllReadResponse>;\n}\n\nexport const NOTIFICATIONS_PREFIX = \"/notifications\";\n\nexport const NOTIFICATIONS_ROUTES: APIRoutes<NotificationsApi> = {\n listNotifications: (): string => NOTIFICATIONS_PREFIX,\n getUnreadCount: (): string => `${NOTIFICATIONS_PREFIX}/unread-count`,\n markNotificationRead: (id: string): string => `${NOTIFICATIONS_PREFIX}/${id}/mark-read`,\n markAllNotificationsRead: (): string => `${NOTIFICATIONS_PREFIX}/mark-all-read`\n};\n", "export const NOTIFICATION_TYPE = {\n AGENT_IDE_ATTENTION: \"AGENT_IDE_ATTENTION\",\n AGENT_NEEDS_CLARIFICATION: \"AGENT_NEEDS_CLARIFICATION\",\n AGENT_RUN_FAILED: \"AGENT_RUN_FAILED\",\n AGENT_QA_HAS_BUGS: \"AGENT_QA_HAS_BUGS\"\n} as const;\n\nexport type NotificationType = (typeof NOTIFICATION_TYPE)[keyof typeof NOTIFICATION_TYPE];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=notifications.types.js.map", "export * from \"./notifications.api\";\nexport * from \"./notifications.enum\";\nexport * from \"./notifications.types\";\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=agent-runs.types.js.map", "export * from \"./api-prefix\";\nexport * from \"./api-routes\";\nexport * from \"./enums/work-item-type.enum\";\nexport * from \"./enums/agent-role.enum\";\nexport * from \"./enums/subagent-role.enum\";\nexport * from \"./enums/agent-run-outcome.enum\";\nexport * from \"./enums/workflow-phase.enum\";\nexport * from \"./enums/agent-run-status.enum\";\nexport * from \"./enums/board-preset-code.enum\";\nexport * from \"./enums/changed-by-type.enum\";\nexport * from \"./enums/estimation-mode.enum\";\nexport * from \"./enums/task-card-estimation-display.enum\";\nexport * from \"./enums/priority.enum\";\nexport * from \"./enums/label-color.enum\";\nexport * from \"./enums/sprint-status.enum\";\nexport * from \"./enums/sprint-scope-mutation.enum\";\nexport * from \"./labels\";\nexport * from \"./sprints\";\nexport * from \"./project-subagents\";\nexport * from \"./project-webhooks\";\nexport * from \"./boards/boards.api\";\nexport * from \"./boards/boards.consts\";\nexport * from \"./boards/boards.types\";\nexport * from \"./types/wire-types\";\nexport * from \"./types/pagination.types\";\nexport * from \"./projects/projects.api\";\nexport * from \"./projects/projects.types\";\nexport * from \"./projects/project-binding.types\";\nexport * from \"./work-items/work-items.api\";\nexport * from \"./work-items/work-items.consts\";\nexport * from \"./work-items/work-items.types\";\nexport * from \"./git-release\";\nexport * from \"./attachments\";\nexport * from \"./comments\";\nexport * from \"./feedback\";\nexport * from \"./notifications\";\nexport * from \"./agent-runs/agent-runs.api\";\nexport * from \"./agent-runs/agent-runs.types\";\n", "import { BOARD_PRESET_CODE, type BoardPresetCode } from \"@task-boards/api\";\n\nexport interface InitBoardPresetColumnDefinition {\n slug: string;\n name: string;\n position: number;\n triggersAgent: boolean;\n agentRole?: string;\n cursorSubagentType?: string;\n}\n\nexport interface InitBoardPresetDefinition {\n code: BoardPresetCode;\n name: string;\n columnDefinitions: InitBoardPresetColumnDefinition[];\n}\n\n/** Reference column layouts for init migration seeds (7-col AGENTIC_SDLC). */\nexport const INIT_BOARD_PRESET_DEFINITIONS: readonly InitBoardPresetDefinition[] = [\n {\n code: BOARD_PRESET_CODE.AGENTIC_SDLC,\n name: \"Agentic SDLC\",\n columnDefinitions: [\n { slug: \"backlog\", name: \"Backlog\", position: 0, triggersAgent: false },\n { slug: \"in-awaiting\", name: \"In Awaiting\", position: 1, triggersAgent: false },\n {\n slug: \"in-analysis\",\n name: \"In Analysis\",\n position: 2,\n triggersAgent: true,\n agentRole: \"FUNCTIONAL_ANALYST\",\n cursorSubagentType: \"functional-analyst\"\n },\n {\n slug: \"in-development\",\n name: \"In Development\",\n position: 3,\n triggersAgent: true,\n agentRole: \"FULLSTACK_DEV\",\n cursorSubagentType: \"senior-web-developer\"\n },\n {\n slug: \"in-qa\",\n name: \"In QA\",\n position: 4,\n triggersAgent: true,\n agentRole: \"QA_ENGINEER\",\n cursorSubagentType: \"senior-qa-engineer\"\n },\n { slug: \"done\", name: \"Done\", position: 5, triggersAgent: false },\n { slug: \"released\", name: \"Released\", position: 6, triggersAgent: false }\n ]\n },\n {\n code: BOARD_PRESET_CODE.KANBAN,\n name: \"Kanban\",\n columnDefinitions: [\n { slug: \"backlog\", name: \"Backlog\", position: 0, triggersAgent: false },\n { slug: \"in-progress\", name: \"In Progress\", position: 1, triggersAgent: false },\n { slug: \"done\", name: \"Done\", position: 2, triggersAgent: false }\n ]\n },\n {\n code: BOARD_PRESET_CODE.SCRUM,\n name: \"Scrum\",\n columnDefinitions: [\n { slug: \"backlog\", name: \"Backlog\", position: 0, triggersAgent: false },\n { slug: \"sprint-backlog\", name: \"Sprint Backlog\", position: 1, triggersAgent: false },\n { slug: \"in-progress\", name: \"In Progress\", position: 2, triggersAgent: false },\n { slug: \"in-review\", name: \"In Review\", position: 3, triggersAgent: false },\n { slug: \"done\", name: \"Done\", position: 4, triggersAgent: false }\n ]\n }\n] as const;\n", "export * from \"./init-board-preset-definitions\";\n", "export enum SubscriptionTier {\n FREE = \"FREE\",\n PRO = \"PRO\",\n ULTIMATE = \"ULTIMATE\"\n}\n", "import { SubscriptionTier } from \"../internal/subscriptions/subscription-tier.enum\";\n\nexport interface InitPricingPlanRow {\n tier: SubscriptionTier;\n displayName: string;\n ownedActiveProjectLimit: number;\n projectMemberLimit: number | null;\n llmSubagentEnabled: boolean;\n workItemAttachmentsEnabled: boolean;\n outboundWebhooksEnabled: boolean;\n monthlyPrice: string | null;\n currency: string;\n sortOrder: number;\n isPublic: boolean;\n isEnabled: boolean;\n discount3MonthsPercent: number | null;\n discount6MonthsPercent: number | null;\n discount9MonthsPercent: number | null;\n discount12MonthsPercent: number | null;\n}\n\n/** Reference pricing_plan rows for init migration seeds. */\nexport const INIT_PRICING_PLAN_ROWS: readonly InitPricingPlanRow[] = [\n {\n tier: SubscriptionTier.FREE,\n displayName: \"Free\",\n ownedActiveProjectLimit: 3,\n projectMemberLimit: 3,\n llmSubagentEnabled: false,\n workItemAttachmentsEnabled: false,\n outboundWebhooksEnabled: false,\n monthlyPrice: \"0\",\n currency: \"USD\",\n sortOrder: 0,\n isPublic: true,\n isEnabled: true,\n discount3MonthsPercent: null,\n discount6MonthsPercent: null,\n discount9MonthsPercent: null,\n discount12MonthsPercent: null\n },\n {\n tier: SubscriptionTier.PRO,\n displayName: \"Pro\",\n ownedActiveProjectLimit: 20,\n projectMemberLimit: 5,\n llmSubagentEnabled: true,\n workItemAttachmentsEnabled: true,\n outboundWebhooksEnabled: true,\n monthlyPrice: null,\n currency: \"USD\",\n sortOrder: 1,\n isPublic: true,\n isEnabled: true,\n discount3MonthsPercent: null,\n discount6MonthsPercent: null,\n discount9MonthsPercent: null,\n discount12MonthsPercent: null\n },\n {\n tier: SubscriptionTier.ULTIMATE,\n displayName: \"Ultimate\",\n ownedActiveProjectLimit: 100,\n projectMemberLimit: null,\n llmSubagentEnabled: true,\n workItemAttachmentsEnabled: true,\n outboundWebhooksEnabled: true,\n monthlyPrice: null,\n currency: \"USD\",\n sortOrder: 2,\n isPublic: true,\n isEnabled: true,\n discount3MonthsPercent: null,\n discount6MonthsPercent: null,\n discount9MonthsPercent: null,\n discount12MonthsPercent: null\n }\n] as const;\n", "export * from \"./init-pricing-plan-seeds\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { PricingPlanResponse } from \"../subscriptions/subscriptions.types\";\n\nimport type {\n AuthMessageResponse,\n ConfirmEmailQuery,\n ForgotPasswordRequest,\n LoginRequest,\n PasswordPolicyResponse,\n RegisterCaptchaConfigResponse,\n RegisterRequest,\n ResendConfirmationRequest,\n ResetPasswordRequest,\n UserInfo\n} from \"./auth.types\";\n\n/**\n * Human session auth (Google OAuth2 + email/password + JWT cookie).\n */\nexport interface AuthApi {\n /** Redirect to Google OAuth consent screen. */\n googleLogin(): Promise<void>;\n\n /** OAuth callback \u2014 issues session cookie and redirects to frontend. */\n googleCallback(): Promise<void>;\n\n /** Public pricing plans for registration and marketing surfaces. */\n listPublicPricingPlans(): Promise<PricingPlanResponse[]>;\n\n /** Public Turnstile site key for the registration form (when enabled). */\n getRegisterCaptchaConfig(): Promise<RegisterCaptchaConfigResponse>;\n\n /** Public password complexity rules for registration and password forms. */\n getPasswordPolicy(): Promise<PasswordPolicyResponse>;\n\n /** Register with email and password; sends confirmation email. */\n register(body: RegisterRequest): Promise<AuthMessageResponse>;\n\n /** Email/password login \u2014 issues session cookie. */\n login(body: LoginRequest): Promise<UserInfo>;\n\n /** Confirm email address using token query parameter. */\n confirmEmail(query: ConfirmEmailQuery): Promise<AuthMessageResponse>;\n\n /** Resend email confirmation link. */\n resendConfirmation(body: ResendConfirmationRequest): Promise<AuthMessageResponse>;\n\n /** Request a password reset link (anti-enumeration). */\n forgotPassword(body: ForgotPasswordRequest): Promise<AuthMessageResponse>;\n\n /** Set a new password using a reset token. */\n resetPassword(body: ResetPasswordRequest): Promise<AuthMessageResponse>;\n\n /** Current authenticated user from session cookie. */\n getMe(): Promise<UserInfo>;\n\n /** Clear session cookie. */\n logout(): Promise<void>;\n}\n\nexport const AUTH_PREFIX = \"/auth\";\n\nexport const AUTH_ROUTES: APIRoutes<AuthApi> = {\n googleLogin: (): string => `${AUTH_PREFIX}/google`,\n googleCallback: (): string => `${AUTH_PREFIX}/google/callback`,\n listPublicPricingPlans: (): string => `${AUTH_PREFIX}/pricing-plans`,\n getRegisterCaptchaConfig: (): string => `${AUTH_PREFIX}/register/captcha-config`,\n getPasswordPolicy: (): string => `${AUTH_PREFIX}/password-policy`,\n register: (): string => `${AUTH_PREFIX}/register`,\n login: (): string => `${AUTH_PREFIX}/login`,\n confirmEmail: (): string => `${AUTH_PREFIX}/confirm-email`,\n resendConfirmation: (): string => `${AUTH_PREFIX}/resend-confirmation`,\n forgotPassword: (): string => `${AUTH_PREFIX}/forgot-password`,\n resetPassword: (): string => `${AUTH_PREFIX}/reset-password`,\n getMe: (): string => `${AUTH_PREFIX}/me`,\n logout: (): string => `${AUTH_PREFIX}/logout`\n};\n", "import type { StaffRole } from \"./staff-role.enum\";\nimport type { UserKind } from \"./user-kind.enum\";\n\nexport enum SystemRole {\n ADMIN = \"ADMIN\",\n MEMBER = \"MEMBER\"\n}\n\nexport enum ProjectMemberRole {\n OWNER = \"OWNER\",\n MEMBER = \"MEMBER\",\n VIEWER = \"VIEWER\"\n}\n\nexport interface UserInfo {\n id: string;\n email: string | null;\n displayName: string | null;\n firstName: string | null;\n lastName: string | null;\n avatarUrl: string | null;\n systemRole: SystemRole;\n userKind: UserKind;\n staffRoles: StaffRole[];\n emailVerified: boolean;\n hasPassword: boolean;\n tierSelectionCompleted: boolean;\n}\n\nexport interface RegisterRequest {\n email: string;\n password: string;\n firstName: string;\n lastName: string;\n /** Cloudflare Turnstile response token; required when register captcha is enabled. */\n turnstileToken?: string;\n}\n\nexport interface RegisterCaptchaConfigResponse {\n enabled: boolean;\n siteKey: string | null;\n}\n\nexport interface PasswordPolicyResponse {\n minLength: number;\n requireLowercase: boolean;\n requireUppercase: boolean;\n requireDigit: boolean;\n requireSpecialChar: boolean;\n}\n\nexport interface LoginRequest {\n email: string;\n password: string;\n}\n\nexport interface ResendConfirmationRequest {\n email: string;\n}\n\nexport interface ForgotPasswordRequest {\n email: string;\n}\n\nexport interface ResetPasswordRequest {\n token: string;\n newPassword: string;\n}\n\nexport interface ConfirmEmailQuery {\n token: string;\n}\n\nexport interface AuthMessageResponse {\n message: string;\n}\n\nexport interface UpdateProfileRequest {\n firstName: string;\n lastName: string;\n}\n\nexport interface ChangePasswordRequest {\n currentPassword: string;\n newPassword: string;\n}\n", "export enum StaffCapability {\n SYSTEM_OVERVIEW = \"SYSTEM_OVERVIEW\",\n FEEDBACK_READ = \"FEEDBACK_READ\"\n}\n", "export enum StaffRole {\n SUPPORT = \"SUPPORT\"\n}\n", "import { StaffCapability } from \"./staff-capability.enum\";\nimport { StaffRole } from \"./staff-role.enum\";\n\nexport const STAFF_ROLE_CAPABILITIES: Record<StaffRole, readonly StaffCapability[]> = {\n [StaffRole.SUPPORT]: [StaffCapability.SYSTEM_OVERVIEW, StaffCapability.FEEDBACK_READ]\n};\n", "export enum UserKind {\n HUMAN = \"HUMAN\",\n SERVICE = \"SERVICE\"\n}\n", "/** Fixed id of the default-tenant universal automation user (ADR-012). */\nexport const DEFAULT_SERVICE_USER_ID = \"f47ac10b-58cc-4372-a567-0e02b2c3d479\";\n\nexport const SERVICE_USER_DISPLAY_NAME = \"\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\";\n", "export type PasswordPolicyRule = \"minLength\" | \"lowercase\" | \"uppercase\" | \"digit\" | \"specialChar\";\n\nexport interface PasswordPolicy {\n minLength: number;\n requireLowercase: boolean;\n requireUppercase: boolean;\n requireDigit: boolean;\n requireSpecialChar: boolean;\n}\n\nexport const DEFAULT_PASSWORD_COMPLEXITY = {\n requireLowercase: true,\n requireUppercase: true,\n requireDigit: true,\n requireSpecialChar: true\n} as const;\n\nexport interface BuildPasswordPolicyOptions {\n minLength: number;\n requireLowercase?: boolean;\n requireUppercase?: boolean;\n requireDigit?: boolean;\n requireSpecialChar?: boolean;\n}\n\nexport function buildPasswordPolicy(minLengthOrOptions: number | BuildPasswordPolicyOptions): PasswordPolicy {\n const options: BuildPasswordPolicyOptions =\n typeof minLengthOrOptions === \"number\" ? { minLength: minLengthOrOptions } : minLengthOrOptions;\n\n return {\n minLength: options.minLength,\n requireLowercase: options.requireLowercase ?? DEFAULT_PASSWORD_COMPLEXITY.requireLowercase,\n requireUppercase: options.requireUppercase ?? DEFAULT_PASSWORD_COMPLEXITY.requireUppercase,\n requireDigit: options.requireDigit ?? DEFAULT_PASSWORD_COMPLEXITY.requireDigit,\n requireSpecialChar: options.requireSpecialChar ?? DEFAULT_PASSWORD_COMPLEXITY.requireSpecialChar\n };\n}\n\nexport function getFailedPasswordRules(password: string, policy: PasswordPolicy): PasswordPolicyRule[] {\n const failed: PasswordPolicyRule[] = [];\n\n if (password.length < policy.minLength) {\n failed.push(\"minLength\");\n }\n\n if (policy.requireLowercase && !/[a-z]/.test(password)) {\n failed.push(\"lowercase\");\n }\n\n if (policy.requireUppercase && !/[A-Z]/.test(password)) {\n failed.push(\"uppercase\");\n }\n\n if (policy.requireDigit && !/\\d/.test(password)) {\n failed.push(\"digit\");\n }\n\n if (policy.requireSpecialChar && !/[^A-Za-z0-9]/.test(password)) {\n failed.push(\"specialChar\");\n }\n\n return failed;\n}\n\nexport function isPasswordValid(password: string, policy: PasswordPolicy): boolean {\n return getFailedPasswordRules(password, policy).length === 0;\n}\n", "export type { AuthApi } from \"./auth.api\";\nexport { AUTH_PREFIX, AUTH_ROUTES } from \"./auth.api\";\nexport type {\n AuthMessageResponse,\n ConfirmEmailQuery,\n ChangePasswordRequest,\n ForgotPasswordRequest,\n LoginRequest,\n PasswordPolicyResponse,\n RegisterCaptchaConfigResponse,\n RegisterRequest,\n ResendConfirmationRequest,\n ResetPasswordRequest,\n UpdateProfileRequest,\n UserInfo\n} from \"./auth.types\";\nexport { ProjectMemberRole, SystemRole } from \"./auth.types\";\nexport { StaffCapability } from \"./staff-capability.enum\";\nexport { StaffRole } from \"./staff-role.enum\";\nexport { STAFF_ROLE_CAPABILITIES } from \"./staff-role-capabilities.const\";\nexport { UserKind } from \"./user-kind.enum\";\nexport { DEFAULT_SERVICE_USER_ID, SERVICE_USER_DISPLAY_NAME } from \"./service-user.consts\";\nexport {\n buildPasswordPolicy,\n DEFAULT_PASSWORD_COMPLEXITY,\n getFailedPasswordRules,\n isPasswordValid\n} from \"./password-policy.util\";\nexport type { PasswordPolicy, PasswordPolicyRule } from \"./password-policy.util\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { ChangePasswordRequest, UpdateProfileRequest, UserInfo } from \"../auth/auth.types\";\n\nimport type {\n NotificationPreferencesResponse,\n UpdateNotificationPreferencesRequest\n} from \"./account-notification-preferences.types\";\n\n/**\n * Authenticated human account management.\n */\nexport interface AccountApi {\n /** Update profile (first/last name). */\n updateProfile(body: UpdateProfileRequest): Promise<UserInfo>;\n\n /** Change password (requires current password when one is set). */\n changePassword(body: ChangePasswordRequest): Promise<void>;\n\n /** Read email notification and locale preferences. */\n getNotificationPreferences(): Promise<NotificationPreferencesResponse>;\n\n /** Update email notification and/or locale preferences. */\n updateNotificationPreferences(body: UpdateNotificationPreferencesRequest): Promise<NotificationPreferencesResponse>;\n}\n\nexport const ACCOUNT_PREFIX = \"/account\";\n\nexport const ACCOUNT_ROUTES: APIRoutes<AccountApi> = {\n updateProfile: (): string => ACCOUNT_PREFIX,\n changePassword: (): string => `${ACCOUNT_PREFIX}/password`,\n getNotificationPreferences: (): string => `${ACCOUNT_PREFIX}/notification-preferences`,\n updateNotificationPreferences: (): string => `${ACCOUNT_PREFIX}/notification-preferences`\n};\n", "export type { AccountApi } from \"./account.api\";\nexport { ACCOUNT_PREFIX, ACCOUNT_ROUTES } from \"./account.api\";\nexport type {\n NotificationPreferencesResponse,\n UpdateNotificationPreferencesRequest,\n UserLocale\n} from \"./account-notification-preferences.types\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n ApiTokenListResponse,\n CreateApiTokenRequest,\n CreateApiTokenResponse,\n ListApiTokensQuery\n} from \"./api-tokens.types\";\n\n/**\n * MCP API token management.\n * Authenticated humans create, list, and revoke their own tokens.\n * System admins (ADMIN role) can list all tokens for audit.\n * Bearer (API token) authentication cannot call these endpoints.\n */\nexport interface ApiTokensApi {\n /** Create token; plaintext returned once. */\n createToken(body: CreateApiTokenRequest): Promise<CreateApiTokenResponse>;\n\n /** List tokens with masked preview. Keyset-paginated. */\n listTokens(query?: ListApiTokensQuery): Promise<ApiTokenListResponse>;\n\n /** Revoke token by id. */\n revokeToken(id: string): Promise<void>;\n}\n\nexport const API_TOKENS_PREFIX = \"/api-tokens\";\n\nexport const API_TOKENS_ROUTES: APIRoutes<ApiTokensApi> = {\n createToken: (): string => API_TOKENS_PREFIX,\n listTokens: (): string => API_TOKENS_PREFIX,\n revokeToken: (id: string): string => `${API_TOKENS_PREFIX}/${id}`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=api-tokens.types.js.map", "export const API_TOKEN_SCOPE = {\n READ: \"read\",\n WRITE: \"write\"\n} as const;\n\nexport type ApiTokenScope = (typeof API_TOKEN_SCOPE)[keyof typeof API_TOKEN_SCOPE];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n InviteProjectMemberRequest,\n InviteProjectMemberResponse,\n ProjectInvitationListResponse,\n ProjectMemberListResponse,\n ProjectMemberResponse,\n UpdateProjectMemberRequest\n} from \"./members.types\";\n\n/**\n * Project membership management.\n */\nexport interface MembersApi {\n /** List project members. */\n listMembers(projectId: string): Promise<ProjectMemberListResponse>;\n\n /** Hybrid invite: existing user \u2192 member; else pending invitation. OWNER only. */\n inviteMember(projectId: string, body: InviteProjectMemberRequest): Promise<InviteProjectMemberResponse>;\n\n updateMemberRole(\n projectId: string,\n memberId: string,\n body: UpdateProjectMemberRequest\n ): Promise<ProjectMemberResponse>;\n\n removeMember(projectId: string, memberId: string): Promise<void>;\n\n listInvitations(projectId: string): Promise<ProjectInvitationListResponse>;\n\n revokeInvitation(projectId: string, invitationId: string): Promise<void>;\n}\n\nexport const MEMBERS_ROUTES: APIRoutes<MembersApi> = {\n listMembers: (projectId: string): string => `/projects/${projectId}/members`,\n inviteMember: (projectId: string): string => `/projects/${projectId}/members`,\n updateMemberRole: (projectId: string, memberId: string): string => `/projects/${projectId}/members/${memberId}`,\n removeMember: (projectId: string, memberId: string): string => `/projects/${projectId}/members/${memberId}`,\n listInvitations: (projectId: string): string => `/projects/${projectId}/invitations`,\n revokeInvitation: (projectId: string, invitationId: string): string =>\n `/projects/${projectId}/invitations/${invitationId}`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=members.types.js.map", "export const INVITATION_STATUS = {\n PENDING: \"PENDING\",\n ACCEPTED: \"ACCEPTED\",\n REVOKED: \"REVOKED\",\n EXPIRED: \"EXPIRED\"\n} as const;\n\nexport type InvitationStatus = (typeof INVITATION_STATUS)[keyof typeof INVITATION_STATUS];\n\nexport const INVITE_OUTCOME = {\n MEMBER_ADDED: \"MEMBER_ADDED\",\n INVITATION_SENT: \"INVITATION_SENT\"\n} as const;\n\nexport type InviteOutcome = (typeof INVITE_OUTCOME)[keyof typeof INVITE_OUTCOME];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n ImportExecuteRequest,\n ImportExecuteResponse,\n ImportPreviewMetadata,\n ImportPreviewResponse\n} from \"./imports.types\";\n\n/**\n * CSV/XLSX task import REST API contract.\n */\nexport interface ImportsApi {\n /**\n * Multipart: field `file` (CSV/XLSX) + field `metadata` (JSON ImportPreviewMetadata).\n * No DB writes.\n */\n previewImport(file: File, metadata: ImportPreviewMetadata): Promise<ImportPreviewResponse>;\n\n /** Commit import in one DB transaction. */\n executeImport(body: ImportExecuteRequest): Promise<ImportExecuteResponse>;\n}\n\nexport const IMPORTS_PREFIX = \"/imports\";\n\nexport const IMPORTS_ROUTES: APIRoutes<ImportsApi> = {\n previewImport: (): string => `${IMPORTS_PREFIX}/preview`,\n executeImport: (): string => `${IMPORTS_PREFIX}/execute`\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=imports.types.js.map", "export const IMPORT_FILE_FORMAT = {\n CSV: \"CSV\",\n XLSX: \"XLSX\"\n} as const;\n\nexport type ImportFileFormat = (typeof IMPORT_FILE_FORMAT)[keyof typeof IMPORT_FILE_FORMAT];\n\nexport const IMPORT_TARGET_MODE = {\n NEW_PROJECT: \"NEW_PROJECT\",\n EXISTING_PROJECT: \"EXISTING_PROJECT\"\n} as const;\n\nexport type ImportTargetMode = (typeof IMPORT_TARGET_MODE)[keyof typeof IMPORT_TARGET_MODE];\n", "export type { ImportsApi } from \"./imports.api\";\nexport { IMPORTS_PREFIX, IMPORTS_ROUTES } from \"./imports.api\";\nexport * from \"./imports.types\";\nexport * from \"./imports.enums\";\n", "export const EXCEPTION_CODE = {\n IMPORT_INVALID_FILE: \"IMPORT_INVALID_FILE\",\n IMPORT_PARSE_ERROR: \"IMPORT_PARSE_ERROR\",\n IMPORT_ROW_LIMIT_EXCEEDED: \"IMPORT_ROW_LIMIT_EXCEEDED\",\n IMPORT_FILE_TOO_LARGE: \"IMPORT_FILE_TOO_LARGE\",\n IMPORT_PREVIEW_NOT_FOUND: \"IMPORT_PREVIEW_NOT_FOUND\",\n IMPORT_PREVIEW_EXPIRED: \"IMPORT_PREVIEW_EXPIRED\",\n IMPORT_EXECUTE_FAILED: \"IMPORT_EXECUTE_FAILED\",\n INVITATION_ALREADY_PENDING: \"INVITATION_ALREADY_PENDING\",\n INVITATION_NOT_FOUND: \"INVITATION_NOT_FOUND\",\n INVITATION_EXPIRED: \"INVITATION_EXPIRED\",\n MEMBER_NOT_FOUND: \"MEMBER_NOT_FOUND\",\n CANNOT_REMOVE_LAST_OWNER: \"CANNOT_REMOVE_LAST_OWNER\",\n CANNOT_DEMOTE_LAST_OWNER: \"CANNOT_DEMOTE_LAST_OWNER\",\n CANNOT_MODIFY_SERVICE_USER: \"CANNOT_MODIFY_SERVICE_USER\",\n CANNOT_REMOVE_SERVICE_USER: \"CANNOT_REMOVE_SERVICE_USER\",\n AGENT_RUN_NOT_COMPLETABLE: \"AGENT_RUN_NOT_COMPLETABLE\",\n AGENT_RUN_INFLIGHT: \"AGENT_RUN_INFLIGHT\",\n AGENT_RUN_NOT_RETRYABLE: \"AGENT_RUN_NOT_RETRYABLE\",\n AGENT_RUN_STALE: \"AGENT_RUN_STALE\",\n WORKFLOW_TRANSITION_INVALID: \"WORKFLOW_TRANSITION_INVALID\",\n WORKFLOW_NOT_DEFINED: \"WORKFLOW_NOT_DEFINED\",\n WORKFLOW_TARGET_COLUMN_NOT_FOUND: \"WORKFLOW_TARGET_COLUMN_NOT_FOUND\",\n ATTACHMENT_NOT_FOUND: \"ATTACHMENT_NOT_FOUND\",\n ATTACHMENT_FILE_TOO_LARGE: \"ATTACHMENT_FILE_TOO_LARGE\",\n ATTACHMENT_LIMIT_EXCEEDED: \"ATTACHMENT_LIMIT_EXCEEDED\",\n ATTACHMENT_INVALID_FILE: \"ATTACHMENT_INVALID_FILE\",\n WORK_ITEM_NOT_RELEASABLE: \"WORK_ITEM_NOT_RELEASABLE\",\n GIT_RELEASE_COMMIT_MISMATCH: \"GIT_RELEASE_COMMIT_MISMATCH\",\n GIT_RELEASE_INVALID_SHA: \"GIT_RELEASE_INVALID_SHA\",\n GIT_RELEASE_BOARD_POSITION_CONFLICT: \"GIT_RELEASE_BOARD_POSITION_CONFLICT\",\n COLUMN_PROTECTED: \"COLUMN_PROTECTED\",\n COLUMN_LIMIT_EXCEEDED: \"COLUMN_LIMIT_EXCEEDED\",\n COLUMN_HAS_ACTIVE_AGENT_RUNS: \"COLUMN_HAS_ACTIVE_AGENT_RUNS\",\n WORK_ITEM_DELETE_FORBIDDEN: \"WORK_ITEM_DELETE_FORBIDDEN\",\n WORK_ITEM_DELETE_ACTIVE_AGENT_RUN: \"WORK_ITEM_DELETE_ACTIVE_AGENT_RUN\",\n WORK_ITEM_DELETE_CASCADE_NOT_CONFIRMED: \"WORK_ITEM_DELETE_CASCADE_NOT_CONFIRMED\",\n PROJECT_ACCESS_DENIED: \"PROJECT_ACCESS_DENIED\",\n PROJECT_ARCHIVED: \"PROJECT_ARCHIVED\",\n PROJECT_NOT_ARCHIVED: \"PROJECT_NOT_ARCHIVED\",\n PROJECT_DELETE_ACTIVE_AGENT_RUN: \"PROJECT_DELETE_ACTIVE_AGENT_RUN\",\n PROJECT_DELETE_KEY_MISMATCH: \"PROJECT_DELETE_KEY_MISMATCH\",\n PROJECT_DELETE_FORBIDDEN: \"PROJECT_DELETE_FORBIDDEN\",\n LABEL_NOT_FOUND: \"LABEL_NOT_FOUND\",\n LABEL_LIMIT_EXCEEDED: \"LABEL_LIMIT_EXCEEDED\",\n WORK_ITEM_LABEL_LIMIT_EXCEEDED: \"WORK_ITEM_LABEL_LIMIT_EXCEEDED\",\n LABEL_NAME_CONFLICT: \"LABEL_NAME_CONFLICT\",\n LABEL_INVALID_IDS: \"LABEL_INVALID_IDS\",\n FEEDBACK_NOT_FOUND: \"FEEDBACK_NOT_FOUND\",\n STAFF_ROLE_ALREADY_ASSIGNED: \"STAFF_ROLE_ALREADY_ASSIGNED\",\n STAFF_ROLE_NOT_ASSIGNED: \"STAFF_ROLE_NOT_ASSIGNED\",\n STAFF_ROLE_INCOMPATIBLE_WITH_ADMIN: \"STAFF_ROLE_INCOMPATIBLE_WITH_ADMIN\",\n CANNOT_ASSIGN_STAFF_ROLE_TO_SERVICE_USER: \"CANNOT_ASSIGN_STAFF_ROLE_TO_SERVICE_USER\",\n SUBSCRIPTION_PROJECT_LIMIT_REACHED: \"SUBSCRIPTION_PROJECT_LIMIT_REACHED\",\n SUBSCRIPTION_MEMBER_LIMIT_REACHED: \"SUBSCRIPTION_MEMBER_LIMIT_REACHED\",\n SUBSCRIPTION_PROJECT_READ_ONLY: \"SUBSCRIPTION_PROJECT_READ_ONLY\",\n SUBSCRIPTION_LLM_TIER_REQUIRED: \"SUBSCRIPTION_LLM_TIER_REQUIRED\",\n SUBSCRIPTION_ATTACHMENTS_TIER_REQUIRED: \"SUBSCRIPTION_ATTACHMENTS_TIER_REQUIRED\",\n SUBSCRIPTION_WEBHOOKS_TIER_REQUIRED: \"SUBSCRIPTION_WEBHOOKS_TIER_REQUIRED\",\n SUBSCRIPTION_TIER_INVALID: \"SUBSCRIPTION_TIER_INVALID\",\n SUBSCRIPTION_NOT_FOUND: \"SUBSCRIPTION_NOT_FOUND\",\n WEBHOOK_CONFIG_NOT_FOUND: \"WEBHOOK_CONFIG_NOT_FOUND\",\n WEBHOOK_URL_INVALID: \"WEBHOOK_URL_INVALID\",\n WEBHOOK_URL_SSRF_BLOCKED: \"WEBHOOK_URL_SSRF_BLOCKED\",\n WEBHOOK_SIGNING_SECRET_INVALID: \"WEBHOOK_SIGNING_SECRET_INVALID\",\n WEBHOOK_NOT_ENABLED: \"WEBHOOK_NOT_ENABLED\",\n SPRINTS_DISABLED: \"SPRINTS_DISABLED\",\n ADMIN_NOTIFICATION_SETTINGS_NOT_FOUND: \"ADMIN_NOTIFICATION_SETTINGS_NOT_FOUND\",\n ADMIN_NOTIFICATION_CHANNEL_INVALID: \"ADMIN_NOTIFICATION_CHANNEL_INVALID\",\n ADMIN_NOTIFICATION_EMAIL_RECIPIENT_REQUIRED: \"ADMIN_NOTIFICATION_EMAIL_RECIPIENT_REQUIRED\",\n ADMIN_NOTIFICATION_TELEGRAM_CONFIG_INCOMPLETE: \"ADMIN_NOTIFICATION_TELEGRAM_CONFIG_INCOMPLETE\",\n PAYMENTS_DISABLED: \"PAYMENTS_DISABLED\",\n PAYMENTS_NOT_CONFIGURED: \"PAYMENTS_NOT_CONFIGURED\",\n PAYMENTS_PROBE_FAILED: \"PAYMENTS_PROBE_FAILED\"\n} as const;\n\nexport type ExceptionCode = (typeof EXCEPTION_CODE)[keyof typeof EXCEPTION_CODE];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { HealthResponse, ReadinessResponse } from \"./health.types\";\n\n/**\n * Public liveness, readiness, and version REST API contract.\n */\nexport interface HealthApi {\n /** Liveness probe with application semver. */\n getHealth(): Promise<HealthResponse>;\n\n /** Readiness probe for DB and attachment storage dependencies. */\n getReadiness(): Promise<ReadinessResponse>;\n}\n\n/** Outside /api/v1 \u2014 excluded from Nest global prefix in main.ts. */\nexport const HEALTH_PREFIX = \"/health\";\n\nexport const HEALTH_ROUTES: APIRoutes<HealthApi> = {\n getHealth: (): string => HEALTH_PREFIX,\n getReadiness: (): string => `${HEALTH_PREFIX}/ready`\n};\n", "import type { IsoDateTimeString } from \"@task-boards/api/types/wire-types\";\n\nexport const HEALTH_STATUS = {\n OK: \"ok\"\n} as const;\n\nexport type HealthStatus = (typeof HEALTH_STATUS)[keyof typeof HEALTH_STATUS];\n\nexport interface HealthResponse {\n status: HealthStatus;\n timestamp: IsoDateTimeString;\n version: string;\n}\n\nexport const READINESS_STATUS = {\n OK: \"ok\",\n ERROR: \"error\"\n} as const;\n\nexport type ReadinessStatus = (typeof READINESS_STATUS)[keyof typeof READINESS_STATUS];\n\nexport const READINESS_CHECK_STATUS = {\n UP: \"up\",\n DOWN: \"down\"\n} as const;\n\nexport type ReadinessCheckStatus = (typeof READINESS_CHECK_STATUS)[keyof typeof READINESS_CHECK_STATUS];\n\nexport interface ReadinessCheck {\n status: ReadinessCheckStatus;\n message?: string;\n}\n\nexport interface ReadinessResponse {\n status: ReadinessStatus;\n timestamp: IsoDateTimeString;\n version: string;\n checks: Record<string, ReadinessCheck>;\n}\n", "export type { HealthApi } from \"./health.api\";\nexport { HEALTH_PREFIX, HEALTH_ROUTES } from \"./health.api\";\nexport * from \"./health.types\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { AdminOverviewResponse } from \"./admin.types\";\n\n/**\n * System admin dashboard API (human admins only).\n */\nexport interface AdminApi {\n /** Tenant-scoped aggregate KPI counts for the admin overview. */\n getOverview(): Promise<AdminOverviewResponse>;\n}\n\nexport const ADMIN_PREFIX = \"/admin\";\n\nexport const ADMIN_ROUTES: APIRoutes<AdminApi> = {\n getOverview: (): string => `${ADMIN_PREFIX}/overview`\n};\n", "export const ADMIN_NOTIFICATION_CHANNEL = {\n NONE: \"none\",\n EMAIL: \"email\",\n TELEGRAM: \"telegram\"\n} as const;\n\nexport type AdminNotificationChannel = (typeof ADMIN_NOTIFICATION_CHANNEL)[keyof typeof ADMIN_NOTIFICATION_CHANNEL];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type {\n AdminNotificationSettingsResponse,\n UpdateAdminNotificationSettingsRequest\n} from \"./admin-notification-settings.types\";\nimport { ADMIN_PREFIX } from \"./admin.api\";\n\n/**\n * System admin outbound notification channel settings (singleton).\n */\nexport interface AdminNotificationSettingsApi {\n getNotificationSettings(): Promise<AdminNotificationSettingsResponse>;\n\n updateNotificationSettings(body: UpdateAdminNotificationSettingsRequest): Promise<AdminNotificationSettingsResponse>;\n\n sendTestNotification(): Promise<void>;\n}\n\nexport const ADMIN_NOTIFICATION_SETTINGS_PREFIX = `${ADMIN_PREFIX}/notification-settings`;\n\nexport const ADMIN_NOTIFICATION_SETTINGS_ROUTES: APIRoutes<AdminNotificationSettingsApi> = {\n getNotificationSettings: (): string => ADMIN_NOTIFICATION_SETTINGS_PREFIX,\n updateNotificationSettings: (): string => ADMIN_NOTIFICATION_SETTINGS_PREFIX,\n sendTestNotification: (): string => `${ADMIN_NOTIFICATION_SETTINGS_PREFIX}/test`\n};\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { SystemRole } from \"../auth/auth.types\";\nimport type { StaffRole } from \"../auth/staff-role.enum\";\nimport type { UserKind } from \"../auth/user-kind.enum\";\nimport type { SubscriptionTier } from \"../subscriptions/subscription-tier.enum\";\n\nimport { ADMIN_PREFIX } from \"./admin.api\";\nimport type { RegisteredWithinDays } from \"./admin-users.consts\";\n\nexport interface AdminUserResponse {\n id: string;\n email: string | null;\n displayName: string | null;\n systemRole: SystemRole;\n userKind: UserKind;\n staffRoles: StaffRole[];\n subscriptionTier: SubscriptionTier;\n /** Stored subscription expiry; null when no end date or no paid row. */\n subscriptionValidUntil: string | null;\n createdAt: string;\n lastActivityAt: string | null;\n}\n\nexport interface AdminUserListResponse {\n items: AdminUserResponse[];\n nextCursor: string | null;\n}\n\nexport interface ListAdminUsersQuery {\n cursor?: string;\n limit?: number;\n search?: string;\n systemRole?: SystemRole;\n registeredWithinDays?: RegisteredWithinDays;\n subscriptionTier?: SubscriptionTier;\n}\n\nexport interface AssignStaffRoleRequest {\n role: StaffRole;\n}\n\n/**\n * System admin user management (human admins only).\n * List tenant users and assign/revoke staff roles.\n */\nexport interface AdminUsersApi {\n /** List human users in the tenant. Keyset-paginated. */\n listUsers(query?: ListAdminUsersQuery): Promise<AdminUserListResponse>;\n\n /** Assign a staff role to a human user. */\n assignStaffRole(userId: string, body: AssignStaffRoleRequest): Promise<AdminUserResponse>;\n\n /** Revoke a staff role from a user. */\n revokeStaffRole(userId: string, role: StaffRole): Promise<AdminUserResponse>;\n}\n\nexport const ADMIN_USERS_ROUTES: APIRoutes<AdminUsersApi> = {\n listUsers: (): string => `${ADMIN_PREFIX}/users`,\n assignStaffRole: (userId: string): string => `${ADMIN_PREFIX}/users/${userId}/staff-roles`,\n revokeStaffRole: (userId: string, role: string): string => `${ADMIN_PREFIX}/users/${userId}/staff-roles/${role}`\n};\n", "export const REGISTERED_WITHIN_DAYS_OPTIONS = [7, 30] as const;\n\nexport type RegisteredWithinDays = (typeof REGISTERED_WITHIN_DAYS_OPTIONS)[number];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=admin.types.js.map", "export type { AdminApi } from \"./admin.api\";\nexport { ADMIN_PREFIX, ADMIN_ROUTES } from \"./admin.api\";\nexport { ADMIN_NOTIFICATION_CHANNEL } from \"./admin-notification-channel.enum\";\nexport type { AdminNotificationChannel } from \"./admin-notification-channel.enum\";\nexport type { AdminNotificationSettingsApi } from \"./admin-notification-settings.api\";\nexport {\n ADMIN_NOTIFICATION_SETTINGS_PREFIX,\n ADMIN_NOTIFICATION_SETTINGS_ROUTES\n} from \"./admin-notification-settings.api\";\nexport type {\n AdminNotificationSettingsResponse,\n UpdateAdminNotificationSettingsRequest\n} from \"./admin-notification-settings.types\";\nexport type {\n AdminUserListResponse,\n AdminUserResponse,\n AdminUsersApi,\n AssignStaffRoleRequest,\n ListAdminUsersQuery\n} from \"./admin-users.api\";\nexport { ADMIN_USERS_ROUTES } from \"./admin-users.api\";\nexport { REGISTERED_WITHIN_DAYS_OPTIONS } from \"./admin-users.consts\";\nexport type { RegisteredWithinDays } from \"./admin-users.consts\";\nexport * from \"./admin.types\";\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport { ADMIN_PREFIX } from \"../admin/admin.api\";\n\nimport type { PaymentsProbeSuccessResponse } from \"./payments-probe.types\";\n\n/**\n * System admin payment integration API (human admins only).\n */\nexport interface AdminPaymentsApi {\n /** Probe staging payment service connectivity. */\n probePaymentsConnectivity(): Promise<PaymentsProbeSuccessResponse>;\n}\n\nexport const ADMIN_PAYMENTS_PREFIX = `${ADMIN_PREFIX}/payments`;\n\nexport const ADMIN_PAYMENTS_ROUTES: APIRoutes<AdminPaymentsApi> = {\n probePaymentsConnectivity: (): string => `${ADMIN_PAYMENTS_PREFIX}/probe`\n};\n", "export type { AdminPaymentsApi } from \"./admin-payments.api\";\nexport { ADMIN_PAYMENTS_PREFIX, ADMIN_PAYMENTS_ROUTES } from \"./admin-payments.api\";\nexport type { PaymentsProbeSuccessResponse } from \"./payments-probe.types\";\n", "export enum SubscriptionSource {\n DEFAULT = \"DEFAULT\",\n ADMIN_GRANT = \"ADMIN_GRANT\",\n AUTO_PROMO = \"AUTO_PROMO\"\n}\n", "export enum SubscriptionAuditAction {\n GRANT = \"GRANT\",\n REVOKE = \"REVOKE\",\n TIER_CHANGE = \"TIER_CHANGE\"\n}\n", "export const PRICING_COMMITMENT_MONTHS = [3, 6, 9, 12] as const;\n\nexport type PricingCommitmentMonths = (typeof PRICING_COMMITMENT_MONTHS)[number];\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { AccountSubscriptionResponse, CompleteTierSelectionRequest } from \"./subscriptions.types\";\n\n/**\n * Authenticated human account subscription / billing summary.\n */\nexport interface SubscriptionsAccountApi {\n /** Current tier, usage, limits, and plan comparison (no checkout in MVP). */\n getSubscription(): Promise<AccountSubscriptionResponse>;\n\n /** Record initial tier choice after registration / on first sign-in (MVP: paid tiers await admin grant). */\n completeTierSelection(body: CompleteTierSelectionRequest): Promise<void>;\n}\n\nexport const ACCOUNT_SUBSCRIPTION_PREFIX = \"/account/subscription\";\n\nexport const ACCOUNT_SUBSCRIPTION_ROUTES: APIRoutes<SubscriptionsAccountApi> = {\n getSubscription: (): string => ACCOUNT_SUBSCRIPTION_PREFIX,\n completeTierSelection: (): string => `${ACCOUNT_SUBSCRIPTION_PREFIX}/tier-selection`\n};\n", "import type { APIRoutes } from \"@task-boards/api\";\n\nimport type { AdminUserResponse } from \"../admin/admin-users.api\";\nimport { ADMIN_PREFIX } from \"../admin/admin.api\";\n\nimport type { SubscriptionTier } from \"./subscription-tier.enum\";\nimport type {\n AdminSubscriptionStatsResponse,\n GrantSubscriptionRequest,\n PricingPlanResponse,\n RevokeSubscriptionRequest,\n SubscriptionSettingsResponse,\n UpdatePricingPlanRequest,\n UpdateSubscriptionSettingsRequest\n} from \"./subscriptions.types\";\n\n/**\n * System admin subscription management (pricing, grants, stats).\n */\nexport interface AdminSubscriptionsApi {\n listPricingPlans(): Promise<PricingPlanResponse[]>;\n\n updatePricingPlan(tier: SubscriptionTier, body: UpdatePricingPlanRequest): Promise<PricingPlanResponse>;\n\n getSubscriptionStats(): Promise<AdminSubscriptionStatsResponse>;\n\n grantUserSubscription(userId: string, body: GrantSubscriptionRequest): Promise<AdminUserResponse>;\n\n revokeUserSubscription(userId: string, body: RevokeSubscriptionRequest): Promise<AdminUserResponse>;\n\n getSubscriptionSettings(): Promise<SubscriptionSettingsResponse>;\n\n updateSubscriptionSettings(body: UpdateSubscriptionSettingsRequest): Promise<SubscriptionSettingsResponse>;\n}\n\nexport const ADMIN_PRICING_PLANS_PREFIX = `${ADMIN_PREFIX}/pricing-plans`;\nexport const ADMIN_SUBSCRIPTIONS_PREFIX = `${ADMIN_PREFIX}/subscriptions`;\n\nexport const ADMIN_SUBSCRIPTIONS_ROUTES: APIRoutes<AdminSubscriptionsApi> = {\n listPricingPlans: (): string => ADMIN_PRICING_PLANS_PREFIX,\n updatePricingPlan: (tier: string): string => `${ADMIN_PRICING_PLANS_PREFIX}/${tier}`,\n getSubscriptionStats: (): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/stats`,\n grantUserSubscription: (userId: string): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/users/${userId}/grant`,\n revokeUserSubscription: (userId: string): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/users/${userId}/revoke`,\n getSubscriptionSettings: (): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/settings`,\n updateSubscriptionSettings: (): string => `${ADMIN_SUBSCRIPTIONS_PREFIX}/settings`\n};\n", "export { SubscriptionTier } from \"./subscription-tier.enum\";\nexport { SubscriptionSource } from \"./subscription-source.enum\";\nexport { SubscriptionAuditAction } from \"./subscription-audit-action.enum\";\nexport { PRICING_COMMITMENT_MONTHS } from \"./pricing-commitment-months\";\nexport type { PricingCommitmentMonths } from \"./pricing-commitment-months\";\nexport type {\n AccountSubscriptionResponse,\n AdminSubscriptionStatsResponse,\n CompleteTierSelectionRequest,\n GrantSubscriptionRequest,\n PricingPlanResponse,\n RevokeSubscriptionRequest,\n SubscriptionEntitlements,\n SubscriptionExpiryWarning,\n SubscriptionReadOnlyProject,\n SubscriptionSettingsResponse,\n UpdatePricingPlanRequest,\n UpdateSubscriptionSettingsRequest\n} from \"./subscriptions.types\";\nexport type { SubscriptionsAccountApi } from \"./subscriptions.api\";\nexport { ACCOUNT_SUBSCRIPTION_PREFIX, ACCOUNT_SUBSCRIPTION_ROUTES } from \"./subscriptions.api\";\nexport type { AdminSubscriptionsApi } from \"./admin-subscriptions.api\";\nexport {\n ADMIN_PRICING_PLANS_PREFIX,\n ADMIN_SUBSCRIPTIONS_PREFIX,\n ADMIN_SUBSCRIPTIONS_ROUTES\n} from \"./admin-subscriptions.api\";\n", "export * as Auth from \"./auth\";\nexport type {\n AuthApi,\n AuthMessageResponse,\n ChangePasswordRequest,\n LoginRequest,\n PasswordPolicy,\n PasswordPolicyResponse,\n PasswordPolicyRule,\n RegisterCaptchaConfigResponse,\n RegisterRequest,\n ResendConfirmationRequest,\n UpdateProfileRequest,\n UserInfo\n} from \"./auth\";\nexport {\n buildPasswordPolicy,\n DEFAULT_PASSWORD_COMPLEXITY,\n getFailedPasswordRules,\n isPasswordValid\n} from \"./auth/password-policy.util\";\nexport { AUTH_PREFIX, AUTH_ROUTES } from \"./auth/auth.api\";\nexport * from \"./account\";\nexport * from \"./api-tokens/api-tokens.api\";\nexport * from \"./api-tokens/api-tokens.types\";\nexport * from \"./enums/api-token-scope.enum\";\nexport * from \"./auth/auth.types\";\nexport { StaffCapability, StaffRole, STAFF_ROLE_CAPABILITIES } from \"./auth\";\nexport { UserKind } from \"./auth/user-kind.enum\";\nexport { DEFAULT_SERVICE_USER_ID, SERVICE_USER_DISPLAY_NAME } from \"./auth/service-user.consts\";\nexport * from \"./members/members.api\";\nexport * from \"./members/members.types\";\nexport * from \"./members/invitations.enums\";\nexport * from \"./imports\";\nexport * from \"./exceptions/exception-codes\";\nexport * from \"./health\";\nexport * from \"./admin\";\nexport * from \"./payments\";\nexport * from \"./subscriptions\";\n", "export const WS_PING_INTERVAL_MS = 25000;\n\nexport const WS_PONG_TIMEOUT_MS = 10000;\n\nexport const WS_CLIENT_WATCHDOG_MS = 75000;\n\nexport const WS_AUTH_HANDSHAKE_TIMEOUT_MS = 5000;\n\nexport const WS_CONNECT_TIMEOUT_MS = 10000;\n", "export const REALTIME_SERVER_EVENT = {\n WORK_ITEM_CREATED: \"work_item.created\",\n WORK_ITEM_UPDATED: \"work_item.updated\",\n WORK_ITEM_MOVED: \"work_item.moved\",\n AGENT_RUN_STATUS_CHANGED: \"agent_run.status_changed\",\n COMMENT_CREATED: \"comment.created\",\n COMMENT_DELETED: \"comment.deleted\",\n WORK_ITEM_DELETED: \"work_item.deleted\",\n PROJECT_IMPORT_COMPLETED: \"project.import_completed\",\n PRESENCE_UPDATED: \"presence.updated\",\n COLUMN_REORDERED: \"column.reordered\",\n NOTIFICATION_CREATED: \"notification.created\",\n PING: \"ping\"\n} as const;\n\nexport interface ProjectImportCompletedPayload {\n projectId: string;\n createdWorkItems: number;\n}\n\nexport type RealtimeServerEvent = (typeof REALTIME_SERVER_EVENT)[keyof typeof REALTIME_SERVER_EVENT];\n\nexport const REALTIME_CLIENT_MESSAGE = {\n SUBSCRIBE: \"subscribe\",\n UNSUBSCRIBE: \"unsubscribe\",\n PONG: \"pong\"\n} as const;\n\nexport type RealtimeClientMessage = (typeof REALTIME_CLIENT_MESSAGE)[keyof typeof REALTIME_CLIENT_MESSAGE];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=realtime.types.js.map", "/**\n * Formats a human-readable work item key from project key and sequence number.\n */\nexport function formatWorkItemDisplayKey(projectKey: string, number: number): string {\n return `${projectKey}-${number}`;\n}\n", "/** Canonical regex (case-insensitive UUID segment). */\nexport const STORY_BRANCH_PATTERN = /^story\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:-.+)?$/i;\n\nconst GIT_SHA_PATTERN = /^[0-9a-f]{40}$/i;\n\nconst REF_PREFIX_PATTERN = /^(?:refs\\/heads\\/|origin\\/)+/;\n\n/**\n * Parses a branch name `story/{uuid}` or `story/{uuid}-slug` into a canonical lowercase work item id.\n */\nexport function parseStoryBranchWorkItemId(branchName: string): string | null {\n const match = STORY_BRANCH_PATTERN.exec(branchName.trim());\n if (!match) {\n return null;\n }\n\n return match[1].toLowerCase();\n}\n\n/**\n * Parses a git ref (`refs/heads/story/...`, `origin/story/...`, or bare branch name).\n */\nexport function parseStoryBranchRef(ref: string): string | null {\n const normalizedRef = ref.trim().replace(REF_PREFIX_PATTERN, \"\");\n return parseStoryBranchWorkItemId(normalizedRef);\n}\n\n/** Returns true when `sha` is a full 40-character hexadecimal git commit id. */\nexport function isValidGitSha(sha: string): boolean {\n return GIT_SHA_PATTERN.test(sha.trim());\n}\n", "/** Matches `work-item:{uuid}`; UUID segment is case-insensitive. */\nconst WORK_ITEM_COMMIT_TAG_PATTERN = /work-item:\\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi;\n\n/**\n * Formats a canonical work-item tag for git commit messages.\n */\nexport function formatWorkItemCommitTag(workItemId: string): string {\n return `work-item:${workItemId.trim().toLowerCase()}`;\n}\n\n/**\n * Parses all distinct work-item ids from a commit message (subject + body).\n * Returns canonical lowercase UUIDs in first-seen order.\n */\nexport function parseWorkItemIdsFromCommitMessage(message: string): string[] {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n for (const match of message.matchAll(WORK_ITEM_COMMIT_TAG_PATTERN)) {\n const id = match[1].toLowerCase();\n if (!seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n\n return ids;\n}\n", "import type { SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport type { SubagentRoleBinding, SubagentRoleBindings } from \"@task-boards/api/projects/projects.types\";\n\n/** Legacy wire format before enabled toggle (still accepted on ingress). */\nexport type LegacySubagentRoleBindings = Partial<Record<SubagentRole, string>>;\n\nexport function createSubagentRoleBinding(slug: string, enabled = true): SubagentRoleBinding {\n return {\n slug: slug.trim(),\n enabled\n };\n}\n\nexport function parseSubagentRoleBinding(value: unknown): SubagentRoleBinding | null {\n if (typeof value === \"string\") {\n const slug = value.trim();\n if (slug.length === 0) {\n return null;\n }\n\n return createSubagentRoleBinding(slug, true);\n }\n\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n\n const record = value as { slug?: unknown; enabled?: unknown };\n if (typeof record.slug !== \"string\") {\n return null;\n }\n\n const slug = record.slug.trim();\n if (slug.length === 0) {\n return null;\n }\n\n const enabled = record.enabled === undefined ? true : record.enabled === true;\n\n return createSubagentRoleBinding(slug, enabled);\n}\n\nexport function normalizeSubagentRoleBindings(\n bindings: SubagentRoleBindings | LegacySubagentRoleBindings | Record<string, unknown>\n): SubagentRoleBindings {\n const normalized: SubagentRoleBindings = {};\n\n for (const [role, value] of Object.entries(bindings)) {\n const binding = parseSubagentRoleBinding(value);\n if (binding !== null) {\n normalized[role as SubagentRole] = binding;\n }\n }\n\n return normalized;\n}\n\nexport function isSubagentRoleActive(bindings: SubagentRoleBindings, role: SubagentRole): boolean {\n const binding = bindings[role];\n if (binding === undefined) {\n return false;\n }\n\n return binding.enabled && binding.slug.trim().length > 0;\n}\n", "import type { SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\n\nimport { isSubagentRoleActive } from \"./subagent-role-bindings.normalize\";\nimport type { SubagentRoleBindings } from \"./subagent-role.types\";\n\n/**\n * Resolves the IDE subagent slug for an active role from project bindings.\n * Returns null when the role is disabled, missing, or has an empty slug.\n */\nexport function resolveSubagentSlug(bindings: SubagentRoleBindings, role: SubagentRole): string | null {\n if (!isSubagentRoleActive(bindings, role)) {\n return null;\n }\n\n return bindings[role]?.slug ?? null;\n}\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nexport function workflowPhaseToSubagentRole(phase: WorkflowPhase): SubagentRole {\n switch (phase) {\n case WORKFLOW_PHASE.PRODUCT:\n return SUBAGENT_ROLE.PRODUCT;\n case WORKFLOW_PHASE.ANALYST:\n return SUBAGENT_ROLE.ANALYST;\n case WORKFLOW_PHASE.ARCHITECT:\n return SUBAGENT_ROLE.ARCHITECT;\n case WORKFLOW_PHASE.DESIGNER:\n return SUBAGENT_ROLE.DESIGNER;\n case WORKFLOW_PHASE.DEVELOPMENT:\n return SUBAGENT_ROLE.DEVELOPER;\n default: {\n const _exhaustive: never = phase;\n return _exhaustive;\n }\n }\n}\n\nexport function subagentRoleToWorkflowPhase(role: SubagentRole): WorkflowPhase | null {\n switch (role) {\n case SUBAGENT_ROLE.PRODUCT:\n return WORKFLOW_PHASE.PRODUCT;\n case SUBAGENT_ROLE.ANALYST:\n return WORKFLOW_PHASE.ANALYST;\n case SUBAGENT_ROLE.ARCHITECT:\n return WORKFLOW_PHASE.ARCHITECT;\n case SUBAGENT_ROLE.DESIGNER:\n return WORKFLOW_PHASE.DESIGNER;\n case SUBAGENT_ROLE.FRONTEND_DEVELOPER:\n case SUBAGENT_ROLE.DEVELOPER:\n return WORKFLOW_PHASE.DEVELOPMENT;\n default:\n return null;\n }\n}\n\n/** @deprecated Use workflowPhaseToSubagentRole */\nexport const workflowPhaseToAgentRole = workflowPhaseToSubagentRole;\n\n/** @deprecated Use subagentRoleToWorkflowPhase */\nexport const agentRoleToWorkflowPhase = subagentRoleToWorkflowPhase;\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nimport { resolveSubagentSlug } from \"../subagent-role/subagent-role.util\";\nimport type { SubagentRoleBindings } from \"../subagent-role/subagent-role.types\";\n\nimport { workflowPhaseToSubagentRole } from \"./workflow-phase-subagent-role.map\";\n\nexport const IN_ANALYSIS_PHASE_CHAIN = [\n WORKFLOW_PHASE.PRODUCT,\n WORKFLOW_PHASE.ANALYST,\n WORKFLOW_PHASE.ARCHITECT\n] as const;\n\nexport type InAnalysisPhase = (typeof IN_ANALYSIS_PHASE_CHAIN)[number];\n\nexport const DEVELOPMENT_DEV_ROLES = [SUBAGENT_ROLE.FRONTEND_DEVELOPER, SUBAGENT_ROLE.DEVELOPER] as const;\n\nexport const AGENTIC_SDLC_COLUMN_CLAIM_PRIORITY: Record<string, number> = {\n \"in-development\": 1,\n \"in-qa\": 2,\n \"in-analysis\": 3\n};\n\nexport function isRoleBound(bindings: SubagentRoleBindings, role: SubagentRole): boolean {\n return resolveSubagentSlug(bindings, role) !== null;\n}\n\nexport function getFirstConfiguredAnalysisPhase(bindings: SubagentRoleBindings): WorkflowPhase | null {\n for (const phase of IN_ANALYSIS_PHASE_CHAIN) {\n const role = workflowPhaseToSubagentRole(phase);\n if (isRoleBound(bindings, role)) {\n return phase;\n }\n }\n\n return null;\n}\n\nexport function getNextAnalysisPhase(current: WorkflowPhase): WorkflowPhase | null {\n const index = IN_ANALYSIS_PHASE_CHAIN.indexOf(current as InAnalysisPhase);\n if (index < 0 || index >= IN_ANALYSIS_PHASE_CHAIN.length - 1) {\n return null;\n }\n\n return IN_ANALYSIS_PHASE_CHAIN[index + 1] ?? null;\n}\n\nexport function advanceAnalysisPhaseSkippingUnbound(\n phase: WorkflowPhase,\n bindings: SubagentRoleBindings\n): WorkflowPhase | null {\n let next: WorkflowPhase | null = getNextAnalysisPhase(phase);\n\n while (next !== null) {\n const role = workflowPhaseToSubagentRole(next);\n if (isRoleBound(bindings, role)) {\n return next;\n }\n\n next = getNextAnalysisPhase(next);\n }\n\n return null;\n}\n\nexport function initPendingDevRoles(bindings: SubagentRoleBindings): SubagentRole[] {\n return DEVELOPMENT_DEV_ROLES.filter(role => isRoleBound(bindings, role));\n}\n\nexport function removeDevRoleFromPending(pendingDevRoles: SubagentRole[], completedRole: SubagentRole): SubagentRole[] {\n return pendingDevRoles.filter(role => role !== completedRole);\n}\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { AGENT_RUN_OUTCOME, type AgentRunOutcome } from \"@task-boards/api/enums/agent-run-outcome.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nimport { getNextAnalysisPhase, removeDevRoleFromPending } from \"./agentic-sdlc-phase-chain\";\nimport { subagentRoleToWorkflowPhase } from \"./workflow-phase-subagent-role.map\";\n\nexport const IN_AWAITING_COLUMN_SLUG = \"in-awaiting\";\n\nexport const AGENTIC_SDLC_AGENT_COLUMN_SLUGS = [\"in-analysis\", \"in-development\", \"in-qa\"] as const;\n\nexport type AgenticSdlcAgentColumnSlug = (typeof AGENTIC_SDLC_AGENT_COLUMN_SLUGS)[number];\n\nconst AGENTIC_SDLC_AGENT_COLUMN_SLUG_SET = new Set<string>(AGENTIC_SDLC_AGENT_COLUMN_SLUGS);\n\nexport function isAgenticSdlcAgentColumnSlug(columnSlug: string): columnSlug is AgenticSdlcAgentColumnSlug {\n return AGENTIC_SDLC_AGENT_COLUMN_SLUG_SET.has(columnSlug);\n}\n\nexport function isInAnalysisPhaseColumn(columnSlug: string): boolean {\n return columnSlug === \"in-analysis\";\n}\n\nexport interface WorkflowTransition {\n defaultNextSlug: string;\n outcomes?: Partial<Record<AgentRunOutcome, string>>;\n}\n\nexport const AGENTIC_SDLC_WORKFLOW: Record<string, WorkflowTransition> = {\n \"in-analysis\": {\n defaultNextSlug: \"in-development\",\n outcomes: {\n [AGENT_RUN_OUTCOME.SKIP_DESIGN]: \"in-development\",\n [AGENT_RUN_OUTCOME.SKIP_DEV]: \"released\"\n }\n },\n \"in-development\": {\n defaultNextSlug: \"in-qa\"\n },\n \"in-qa\": {\n defaultNextSlug: \"done\",\n outcomes: {\n [AGENT_RUN_OUTCOME.HAS_BUGS]: \"in-development\"\n }\n }\n};\n\nexport const WORKFLOW_TRANSITION_KIND = {\n MOVE: \"MOVE\",\n HANDOFF: \"HANDOFF\",\n STAY: \"STAY\"\n} as const;\n\nexport type WorkflowTransitionKind = (typeof WORKFLOW_TRANSITION_KIND)[keyof typeof WORKFLOW_TRANSITION_KIND];\n\nexport interface WorkflowTransitionResult {\n kind: WorkflowTransitionKind;\n nextColumnSlug: string | null;\n nextWorkflowPhase: WorkflowPhase | null;\n nextAgentRole: SubagentRole | null;\n}\n\nexport interface AgenticSdlcTransitionContext {\n workflowPhase: WorkflowPhase | null;\n agentRole: SubagentRole;\n designerRequired?: boolean;\n /** From work item at complete time; SKIP_DEV requires explicit false. */\n codeChangesRequired?: boolean;\n pendingDevRoles?: SubagentRole[];\n}\n\nfunction moveTransition(\n nextColumnSlug: string,\n nextWorkflowPhase: WorkflowPhase | null,\n nextAgentRole: SubagentRole | null\n): WorkflowTransitionResult {\n return {\n kind: WORKFLOW_TRANSITION_KIND.MOVE,\n nextColumnSlug,\n nextWorkflowPhase,\n nextAgentRole\n };\n}\n\nfunction handoffTransition(\n nextColumnSlug: string,\n nextWorkflowPhase: WorkflowPhase,\n nextAgentRole: SubagentRole\n): WorkflowTransitionResult {\n return {\n kind: WORKFLOW_TRANSITION_KIND.HANDOFF,\n nextColumnSlug,\n nextWorkflowPhase,\n nextAgentRole\n };\n}\n\nfunction stayTransition(\n nextColumnSlug: string,\n nextWorkflowPhase: WorkflowPhase | null,\n nextAgentRole: SubagentRole | null\n): WorkflowTransitionResult {\n return {\n kind: WORKFLOW_TRANSITION_KIND.STAY,\n nextColumnSlug,\n nextWorkflowPhase,\n nextAgentRole\n };\n}\n\nfunction resolveInAnalysisTransition(\n outcome: AgentRunOutcome,\n workflowPhase: WorkflowPhase | null,\n context: AgenticSdlcTransitionContext\n): WorkflowTransitionResult | null {\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return moveTransition(IN_AWAITING_COLUMN_SLUG, workflowPhase, null);\n }\n\n if (workflowPhase === WORKFLOW_PHASE.PRODUCT) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n const nextPhase = getNextAnalysisPhase(WORKFLOW_PHASE.PRODUCT);\n if (nextPhase === null) {\n return null;\n }\n\n return handoffTransition(\"in-analysis\", nextPhase, workflowPhaseToSubagentRoleForHandoff(nextPhase));\n }\n\n return null;\n }\n\n if (workflowPhase === WORKFLOW_PHASE.ANALYST) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n return handoffTransition(\"in-analysis\", WORKFLOW_PHASE.ARCHITECT, SUBAGENT_ROLE.ARCHITECT);\n }\n\n if (outcome === AGENT_RUN_OUTCOME.SKIP_DESIGN) {\n return moveTransition(\"in-development\", WORKFLOW_PHASE.DEVELOPMENT, null);\n }\n\n if (outcome === AGENT_RUN_OUTCOME.SKIP_DEV) {\n if (context.codeChangesRequired !== false) {\n return null;\n }\n\n return moveTransition(\"released\", null, null);\n }\n\n return null;\n }\n\n if (workflowPhase === WORKFLOW_PHASE.ARCHITECT) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT || outcome === AGENT_RUN_OUTCOME.SKIP_DESIGN) {\n return moveTransition(\"in-development\", null, null);\n }\n\n return null;\n }\n\n return null;\n}\n\nfunction workflowPhaseToSubagentRoleForHandoff(phase: WorkflowPhase): SubagentRole {\n if (phase === WORKFLOW_PHASE.ANALYST) {\n return SUBAGENT_ROLE.ANALYST;\n }\n\n if (phase === WORKFLOW_PHASE.ARCHITECT) {\n return SUBAGENT_ROLE.ARCHITECT;\n }\n\n if (phase === WORKFLOW_PHASE.PRODUCT) {\n return SUBAGENT_ROLE.PRODUCT;\n }\n\n if (phase === WORKFLOW_PHASE.DESIGNER) {\n return SUBAGENT_ROLE.DESIGNER;\n }\n\n return SUBAGENT_ROLE.DEVELOPER;\n}\n\nfunction resolveInDevelopmentTransition(\n outcome: AgentRunOutcome,\n context: AgenticSdlcTransitionContext\n): WorkflowTransitionResult | null {\n const workflowPhase = context.workflowPhase;\n\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return moveTransition(IN_AWAITING_COLUMN_SLUG, workflowPhase, null);\n }\n\n if (workflowPhase === WORKFLOW_PHASE.DESIGNER) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT || outcome === AGENT_RUN_OUTCOME.SKIP_DESIGN) {\n return handoffTransition(\"in-development\", WORKFLOW_PHASE.DEVELOPMENT, SUBAGENT_ROLE.DEVELOPER);\n }\n\n return null;\n }\n\n if (workflowPhase === WORKFLOW_PHASE.DEVELOPMENT || workflowPhase === null) {\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n const pending = context.pendingDevRoles ?? [context.agentRole];\n const remaining = removeDevRoleFromPending(pending, context.agentRole);\n\n if (remaining.length > 0) {\n return stayTransition(\"in-development\", WORKFLOW_PHASE.DEVELOPMENT, null);\n }\n\n return moveTransition(\"in-qa\", null, SUBAGENT_ROLE.QA);\n }\n\n return null;\n }\n\n return null;\n}\n\nfunction resolveInQaTransition(outcome: AgentRunOutcome): WorkflowTransitionResult | null {\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return moveTransition(IN_AWAITING_COLUMN_SLUG, null, null);\n }\n\n const transition: WorkflowTransition | undefined = AGENTIC_SDLC_WORKFLOW[\"in-qa\"];\n if (!transition) {\n return null;\n }\n\n if (outcome === AGENT_RUN_OUTCOME.DEFAULT) {\n return moveTransition(transition.defaultNextSlug, null, null);\n }\n\n const outcomeNextSlug: string | undefined = transition.outcomes?.[outcome];\n if (!outcomeNextSlug) {\n return null;\n }\n\n if (outcome === AGENT_RUN_OUTCOME.HAS_BUGS) {\n return moveTransition(outcomeNextSlug, WORKFLOW_PHASE.DEVELOPMENT, null);\n }\n\n return moveTransition(outcomeNextSlug, null, null);\n}\n\n/**\n * Resolves the next workflow step for an AGENTIC_SDLC transition, including phase handoffs.\n *\n * @returns Transition result, or `null` when `outcome` is FAILED or the transition is invalid.\n */\nexport function resolveAgenticSdlcTransition(\n currentColumnSlug: string,\n outcome: AgentRunOutcome,\n context: AgenticSdlcTransitionContext\n): WorkflowTransitionResult | null {\n if (outcome === AGENT_RUN_OUTCOME.FAILED) {\n return null;\n }\n\n if (currentColumnSlug === \"in-analysis\") {\n const phase: WorkflowPhase | null = context.workflowPhase ?? subagentRoleToWorkflowPhase(context.agentRole);\n\n return resolveInAnalysisTransition(outcome, phase, context);\n }\n\n if (currentColumnSlug === \"in-development\") {\n return resolveInDevelopmentTransition(outcome, context);\n }\n\n if (currentColumnSlug === \"in-qa\") {\n return resolveInQaTransition(outcome);\n }\n\n if (outcome === AGENT_RUN_OUTCOME.NEEDS_CLARIFICATION) {\n return null;\n }\n\n return null;\n}\n\n/**\n * Resolves the next column slug for an AGENTIC_SDLC workflow transition.\n *\n * @returns Next column slug for MOVE transitions only; `null` for HANDOFF, STAY, FAILED, or invalid input.\n */\nexport function resolveAgenticSdlcNextColumnSlug(\n currentColumnSlug: string,\n outcome: AgentRunOutcome,\n context?: AgenticSdlcTransitionContext\n): string | null {\n if (!context) {\n if (currentColumnSlug === \"in-analysis\") {\n return null;\n }\n\n const fallbackContext: AgenticSdlcTransitionContext = {\n workflowPhase: null,\n agentRole: SUBAGENT_ROLE.ANALYST\n };\n\n const transition: WorkflowTransitionResult | null = resolveAgenticSdlcTransition(\n currentColumnSlug,\n outcome,\n fallbackContext\n );\n\n if (transition?.kind !== WORKFLOW_TRANSITION_KIND.MOVE) {\n return null;\n }\n\n return transition.nextColumnSlug;\n }\n\n const transition: WorkflowTransitionResult | null = resolveAgenticSdlcTransition(currentColumnSlug, outcome, context);\n\n if (transition?.kind !== WORKFLOW_TRANSITION_KIND.MOVE) {\n return null;\n }\n\n return transition.nextColumnSlug;\n}\n\nexport {\n agentRoleToWorkflowPhase,\n subagentRoleToWorkflowPhase,\n workflowPhaseToAgentRole,\n workflowPhaseToSubagentRole\n} from \"./workflow-phase-subagent-role.map\";\n\nexport {\n AGENTIC_SDLC_COLUMN_CLAIM_PRIORITY,\n DEVELOPMENT_DEV_ROLES,\n IN_ANALYSIS_PHASE_CHAIN,\n advanceAnalysisPhaseSkippingUnbound,\n getFirstConfiguredAnalysisPhase,\n getNextAnalysisPhase,\n initPendingDevRoles,\n isRoleBound,\n removeDevRoleFromPending,\n type InAnalysisPhase\n} from \"./agentic-sdlc-phase-chain\";\n", "import { BOARD_PRESET_CODE, type BoardPresetCode } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { WORK_ITEM_TYPE, type WorkItemType } from \"@task-boards/api/enums/work-item-type.enum\";\nimport { WORKFLOW_PHASE, type WorkflowPhase } from \"@task-boards/api/enums/workflow-phase.enum\";\n\nimport { AGENTIC_SDLC_AGENT_COLUMN_SLUGS } from \"./agentic-sdlc.workflow\";\n\nexport interface AgenticPhasesProject {\n presetCode: BoardPresetCode;\n agenticSdlcPhasesEnabled: boolean;\n}\n\nexport interface ColumnSlugContext {\n workflowPhase: WorkflowPhase | null;\n assignedAgentRole: SubagentRole | null;\n pendingDevRoles: SubagentRole[];\n}\n\nconst LOGICAL_AGENT_COLUMN_SLUG_SET = new Set<string>(AGENTIC_SDLC_AGENT_COLUMN_SLUGS);\n\nconst ANALYSIS_WORKFLOW_PHASES = new Set<WorkflowPhase>([\n WORKFLOW_PHASE.PRODUCT,\n WORKFLOW_PHASE.ANALYST,\n WORKFLOW_PHASE.ARCHITECT\n]);\n\nexport function isAgenticPhasesEnabled(project: AgenticPhasesProject): boolean {\n if (project.presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC) {\n return true;\n }\n\n return project.agenticSdlcPhasesEnabled;\n}\n\nexport function isLogicalAgentColumnSlug(slug: string): boolean {\n return LOGICAL_AGENT_COLUMN_SLUG_SET.has(slug);\n}\n\nfunction resolveInProgressLogicalSlug(ctx: ColumnSlugContext): string | null {\n if (ctx.assignedAgentRole === SUBAGENT_ROLE.QA) {\n return \"in-qa\";\n }\n\n if (ctx.workflowPhase === WORKFLOW_PHASE.DEVELOPMENT || ctx.workflowPhase === WORKFLOW_PHASE.DESIGNER) {\n return \"in-development\";\n }\n\n if (ctx.workflowPhase !== null && ANALYSIS_WORKFLOW_PHASES.has(ctx.workflowPhase)) {\n return \"in-analysis\";\n }\n\n return null;\n}\n\nexport function toLogicalColumnSlug(\n physicalColumnSlug: string,\n presetCode: BoardPresetCode,\n ctx: ColumnSlugContext\n): string | null {\n if (presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC) {\n return physicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.KANBAN) {\n if (physicalColumnSlug === \"in-progress\") {\n return resolveInProgressLogicalSlug(ctx);\n }\n\n return physicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.SCRUM) {\n if (physicalColumnSlug === \"in-review\") {\n return \"in-qa\";\n }\n\n if (physicalColumnSlug === \"in-progress\") {\n return resolveInProgressLogicalSlug(ctx);\n }\n\n return physicalColumnSlug;\n }\n\n return physicalColumnSlug;\n}\n\nexport function toPhysicalColumnSlug(logicalColumnSlug: string, presetCode: BoardPresetCode): string {\n if (presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC) {\n return logicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.KANBAN) {\n if (logicalColumnSlug === \"in-awaiting\") {\n return \"backlog\";\n }\n\n if (isLogicalAgentColumnSlug(logicalColumnSlug)) {\n return \"in-progress\";\n }\n\n return logicalColumnSlug;\n }\n\n if (presetCode === BOARD_PRESET_CODE.SCRUM) {\n if (logicalColumnSlug === \"in-awaiting\") {\n return \"backlog\";\n }\n\n if (logicalColumnSlug === \"in-qa\") {\n return \"in-review\";\n }\n\n if (logicalColumnSlug === \"in-analysis\" || logicalColumnSlug === \"in-development\") {\n return \"in-progress\";\n }\n\n return logicalColumnSlug;\n }\n\n return logicalColumnSlug;\n}\n\nexport function shouldSyntheticEnqueue(\n project: AgenticPhasesProject,\n physicalColumnSlug: string,\n ctx: ColumnSlugContext & { workItemType: WorkItemType }\n): boolean {\n if (!isAgenticPhasesEnabled(project)) {\n return false;\n }\n\n if (ctx.workItemType !== WORK_ITEM_TYPE.STORY) {\n return false;\n }\n\n const logicalSlug = toLogicalColumnSlug(physicalColumnSlug, project.presetCode, ctx);\n\n return logicalSlug !== null && isLogicalAgentColumnSlug(logicalSlug);\n}\n\n/** Resolves logical agent column slug from a work item's physical column and workflow state. */\nexport function resolveLogicalColumnSlugForWorkItem(\n presetCode: BoardPresetCode,\n physicalColumnSlug: string | null,\n workflowPhase: WorkflowPhase | null,\n assignedAgentRole: SubagentRole | null,\n pendingDevRoles: SubagentRole[] = []\n): string | null {\n if (physicalColumnSlug === null) {\n return null;\n }\n\n return toLogicalColumnSlug(physicalColumnSlug, presetCode, {\n workflowPhase,\n assignedAgentRole,\n pendingDevRoles\n });\n}\n", "export {\n isLogicalAgentColumnSlug,\n resolveLogicalColumnSlugForWorkItem,\n shouldSyntheticEnqueue,\n toLogicalColumnSlug,\n toPhysicalColumnSlug,\n type AgenticPhasesProject,\n type ColumnSlugContext\n} from \"./column-slug-mapping\";\nexport {\n AGENTIC_SDLC_AGENT_COLUMN_SLUGS,\n AGENTIC_SDLC_COLUMN_CLAIM_PRIORITY,\n AGENTIC_SDLC_WORKFLOW,\n DEVELOPMENT_DEV_ROLES,\n IN_ANALYSIS_PHASE_CHAIN,\n IN_AWAITING_COLUMN_SLUG,\n WORKFLOW_TRANSITION_KIND,\n advanceAnalysisPhaseSkippingUnbound,\n agentRoleToWorkflowPhase,\n getFirstConfiguredAnalysisPhase,\n getNextAnalysisPhase,\n initPendingDevRoles,\n isAgenticSdlcAgentColumnSlug,\n isInAnalysisPhaseColumn,\n isRoleBound,\n removeDevRoleFromPending,\n resolveAgenticSdlcNextColumnSlug,\n resolveAgenticSdlcTransition,\n subagentRoleToWorkflowPhase,\n workflowPhaseToAgentRole,\n workflowPhaseToSubagentRole,\n type AgenticSdlcAgentColumnSlug,\n type AgenticSdlcTransitionContext,\n type InAnalysisPhase,\n type WorkflowTransition,\n type WorkflowTransitionKind,\n type WorkflowTransitionResult\n} from \"./agentic-sdlc.workflow\";\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\n\nimport type { SubagentRoleBindings } from \"./subagent-role.types\";\n\n/** Default AGENTIC_SDLC bindings seeded for existing projects during migration. */\nexport const DEFAULT_AGENTIC_SDLC_SUBAGENT_BINDINGS: SubagentRoleBindings = {\n [SUBAGENT_ROLE.ANALYST]: { slug: \"functional-analyst\", enabled: true },\n [SUBAGENT_ROLE.ARCHITECT]: { slug: \"solution-architect-senior\", enabled: true },\n [SUBAGENT_ROLE.DEVELOPER]: { slug: \"senior-web-developer\", enabled: true },\n [SUBAGENT_ROLE.QA]: { slug: \"senior-qa-engineer\", enabled: true }\n};\n\nexport const SUBAGENT_ROLE_LABEL: Record<SubagentRole, string> = {\n [SUBAGENT_ROLE.PRODUCT]: \"Product\",\n [SUBAGENT_ROLE.ARCHITECT]: \"Architect\",\n [SUBAGENT_ROLE.ANALYST]: \"Analyst\",\n [SUBAGENT_ROLE.DESIGNER]: \"Designer\",\n [SUBAGENT_ROLE.FRONTEND_DEVELOPER]: \"Frontend\",\n [SUBAGENT_ROLE.DEVELOPER]: \"Developer\",\n [SUBAGENT_ROLE.QA]: \"QA\",\n [SUBAGENT_ROLE.ORCHESTRATOR]: \"Orchestrator\"\n};\n", "import { SUBAGENT_ROLE, type SubagentRole } from \"@task-boards/api/enums/subagent-role.enum\";\nimport type { SubagentRoleBindings } from \"@task-boards/api/projects/projects.types\";\n\nimport {\n isSubagentRoleActive,\n normalizeSubagentRoleBindings,\n type LegacySubagentRoleBindings\n} from \"./subagent-role-bindings.normalize\";\n\nexport function hasAnyActiveSubagentBindings(\n bindings: SubagentRoleBindings | LegacySubagentRoleBindings | Record<string, unknown>\n): boolean {\n const normalized = normalizeSubagentRoleBindings(bindings);\n\n return (Object.values(SUBAGENT_ROLE) as SubagentRole[]).some(role => isSubagentRoleActive(normalized, role));\n}\n", "import { BOARD_PRESET_CODE, type BoardPresetCode } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport type { SubagentRoleBindings } from \"@task-boards/api/projects/projects.types\";\n\nimport {\n isAgenticPhasesEnabled as isAgenticPhasesEnabledForProject,\n type AgenticPhasesProject\n} from \"../workflows/column-slug-mapping\";\n\nimport { hasAnyActiveSubagentBindings } from \"./subagent-role-bindings.util\";\nimport type { LegacySubagentRoleBindings } from \"./subagent-role-bindings.normalize\";\n\nexport type { AgenticPhasesProject };\n\nexport function isAgenticSdlcPreset(presetCode: BoardPresetCode): boolean {\n return presetCode === BOARD_PRESET_CODE.AGENTIC_SDLC;\n}\n\nexport function isAgenticPhasesEnabled(project: AgenticPhasesProject): boolean {\n return isAgenticPhasesEnabledForProject(project);\n}\n\nexport function isAgentsUnconfigured(\n project: AgenticPhasesProject,\n bindings: SubagentRoleBindings | LegacySubagentRoleBindings | Record<string, unknown>\n): boolean {\n return isAgenticPhasesEnabled(project) && !hasAnyActiveSubagentBindings(bindings);\n}\n", "export type { SubagentRoleBindings } from \"./subagent-role.types\";\nexport type { SubagentRoleBinding } from \"@task-boards/api/projects/projects.types\";\nexport { DEFAULT_AGENTIC_SDLC_SUBAGENT_BINDINGS, SUBAGENT_ROLE_LABEL } from \"./subagent-role-labels\";\nexport {\n createSubagentRoleBinding,\n isSubagentRoleActive,\n normalizeSubagentRoleBindings,\n parseSubagentRoleBinding\n} from \"./subagent-role-bindings.normalize\";\nexport { hasAnyActiveSubagentBindings } from \"./subagent-role-bindings.util\";\nexport {\n isAgenticPhasesEnabled,\n isAgenticSdlcPreset,\n isAgentsUnconfigured,\n type AgenticPhasesProject\n} from \"./project-agents.util\";\nexport { resolveSubagentSlug } from \"./subagent-role.util\";\n", "/** Reserved IDE subagent slugs from the global/team catalog; not creatable per project. */\nexport const BUILTIN_IDE_SUBAGENT_SLUGS = [\n \"functional-analyst\",\n \"solution-architect-senior\",\n \"senior-web-developer\",\n \"senior-qa-engineer\",\n \"senior-frontend-react-developer\",\n \"senior-backend-nodejs-typescript\",\n \"product-manager-senior\",\n \"senior-product-designer\",\n \"security-review\"\n] as const;\n\nexport type BuiltinIdeSubagentSlug = (typeof BUILTIN_IDE_SUBAGENT_SLUGS)[number];\n", "export interface SubagentLlmInputValidationResult {\n valid: boolean;\n reason?: string;\n}\n\nconst INJECTION_PATTERNS: RegExp[] = [\n /ignore\\s+(?:all\\s+)?(?:previous|prior|above)\\s+instructions/i,\n /disregard\\s+(?:all\\s+)?(?:previous|prior|above)/i,\n /you\\s+are\\s+now/i,\n /\\bsystem\\s*:/i,\n /\\[(?:\\/)?INST\\]/i,\n /###\\s*instruction/i,\n /do\\s+not\\s+follow\\s+(?:the\\s+)?(?:above|previous)/i,\n /new\\s+instructions\\s*:/i,\n /override\\s+(?:all\\s+)?rules/i\n];\n\nfunction invalid(reason: string): SubagentLlmInputValidationResult {\n return { valid: false, reason };\n}\n\nfunction containsControlChars(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n\n if (\n code === 0 ||\n (code >= 1 && code <= 8) ||\n code === 11 ||\n code === 12 ||\n (code >= 14 && code <= 31) ||\n code === 127\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction findInjectionPattern(value: string): RegExp | undefined {\n return INJECTION_PATTERNS.find(pattern => pattern.test(value));\n}\n\nfunction validateField(value: string, label: string, maxLength: number): SubagentLlmInputValidationResult | null {\n if (containsControlChars(value)) {\n return invalid(`${label} must not contain control characters.`);\n }\n\n if (value.length > maxLength) {\n return invalid(`${label} must not exceed ${maxLength} characters.`);\n }\n\n const injectionPattern = findInjectionPattern(value);\n\n if (injectionPattern !== undefined) {\n return invalid(`${label} contains disallowed prompt-injection patterns.`);\n }\n\n return null;\n}\n\nexport function validateSubagentLlmInput(\n basePrompt: string,\n name: string,\n description: string,\n maxInputChars: number\n): SubagentLlmInputValidationResult {\n const nameError = validateField(name, \"Name\", maxInputChars);\n\n if (nameError !== null) {\n return nameError;\n }\n\n const descriptionError = validateField(description, \"Description\", maxInputChars);\n\n if (descriptionError !== null) {\n return descriptionError;\n }\n\n const basePromptError = validateField(basePrompt, \"Base prompt\", maxInputChars);\n\n if (basePromptError !== null) {\n return basePromptError;\n }\n\n return { valid: true };\n}\n", "export interface SubagentLlmValidationResult {\n valid: boolean;\n reason?: string;\n}\n\nconst MAX_BODY_CHARS = 32_768;\n\nconst REQUIRED_HEADINGS = [\"## When invoked\", \"## Project domain context\"] as const;\n\nconst DANGEROUS_URL_PATTERN = /(?:javascript|data|script)\\s*:|(?:<script\\b)/i;\n\nconst FRONTMATTER_PATTERN = /^\\s*---[\\s\\S]*?---/;\n\nconst MIN_REPEATED_LINE_LENGTH = 10;\n\nconst REPEATED_LINE_THRESHOLD = 5;\n\nconst MIN_REPEATED_WORD_LENGTH = 4;\n\nconst REPEATED_WORD_MIN_COUNT = 10;\n\nconst REPEATED_WORD_RATIO = 0.25;\n\nfunction invalid(reason: string): SubagentLlmValidationResult {\n return { valid: false, reason };\n}\n\nfunction hasSpamRepetition(body: string): boolean {\n const lines = body\n .split(\"\\n\")\n .map(line => line.trim())\n .filter(line => line.length >= MIN_REPEATED_LINE_LENGTH);\n const lineCounts = new Map<string, number>();\n\n for (const line of lines) {\n const count = (lineCounts.get(line) ?? 0) + 1;\n lineCounts.set(line, count);\n\n if (count >= REPEATED_LINE_THRESHOLD) {\n return true;\n }\n }\n\n const words = body\n .toLowerCase()\n .split(/[^a-z0-9]+/u)\n .filter(word => word.length >= MIN_REPEATED_WORD_LENGTH);\n\n if (words.length === 0) {\n return false;\n }\n\n const wordCounts = new Map<string, number>();\n\n for (const word of words) {\n const count = (wordCounts.get(word) ?? 0) + 1;\n wordCounts.set(word, count);\n\n if (count >= REPEATED_WORD_MIN_COUNT && count / words.length >= REPEATED_WORD_RATIO) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function validateSubagentLlmBodyMarkdown(body: string): SubagentLlmValidationResult {\n const trimmed = body.trim();\n\n if (trimmed.length === 0) {\n return invalid(\"Body must not be empty.\");\n }\n\n if (trimmed.length > MAX_BODY_CHARS) {\n return invalid(`Body must not exceed ${MAX_BODY_CHARS} characters.`);\n }\n\n if (FRONTMATTER_PATTERN.test(trimmed)) {\n return invalid(\"Body must not include YAML frontmatter.\");\n }\n\n for (const heading of REQUIRED_HEADINGS) {\n if (!trimmed.includes(heading)) {\n return invalid(`Body must include the \"${heading}\" section.`);\n }\n }\n\n if (DANGEROUS_URL_PATTERN.test(trimmed)) {\n return invalid(\"Body must not contain script, javascript, or data URLs.\");\n }\n\n if (hasSpamRepetition(trimmed)) {\n return invalid(\"Body contains excessive repeated content.\");\n }\n\n return { valid: true };\n}\n", "export { SUBAGENT_PREVIEW_MODE, type SubagentPreviewMode } from \"@task-boards/api\";\n", "const MAX_SUBAGENT_SLUG_LENGTH = 64;\n\nconst FALLBACK_SLUG = \"subagent\";\n\n/**\n * Derives a kebab-case slug from a display name (max 64 chars).\n */\nexport function nameToSubagentSlug(name: string): string {\n const normalized = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/-{2,}/g, \"-\");\n\n if (normalized.length === 0) {\n return FALLBACK_SLUG;\n }\n\n return normalized.slice(0, MAX_SUBAGENT_SLUG_LENGTH).replace(/-+$/g, \"\");\n}\n\n/**\n * Returns a unique slug by appending `-2`, `-3`, \u2026 when baseSlug collides with existingSlugs.\n */\nexport function resolveSlugCollision(baseSlug: string, existingSlugs: readonly string[]): string {\n const existing = new Set(existingSlugs);\n\n if (!existing.has(baseSlug)) {\n return baseSlug;\n }\n\n let suffix = 2;\n\n while (suffix < 10_000) {\n const candidate = truncateSlug(`${baseSlug}-${suffix}`);\n\n if (!existing.has(candidate)) {\n return candidate;\n }\n\n suffix += 1;\n }\n\n throw new Error(`Unable to resolve slug collision for \"${baseSlug}\"`);\n}\n\nfunction truncateSlug(slug: string): string {\n if (slug.length <= MAX_SUBAGENT_SLUG_LENGTH) {\n return slug;\n }\n\n return slug.slice(0, MAX_SUBAGENT_SLUG_LENGTH).replace(/-+$/g, \"\");\n}\n", "export interface BuildSubagentFileContentParams {\n slug: string;\n name: string;\n description: string;\n basePrompt: string;\n}\n\nexport interface BuildSubagentDefinitionParams {\n slug: string;\n name: string;\n description: string;\n basePrompt: string;\n}\n\nexport interface SubagentDefinitionBuildResult {\n bodyMarkdown: string;\n fileContent: string;\n}\n\n/**\n * Builds IDE-compatible subagent markdown body (without YAML frontmatter).\n */\nexport function buildSubagentBodyMarkdown(params: BuildSubagentDefinitionParams): string {\n const trimmedPrompt = params.basePrompt.trim();\n\n return [\n `You are **${params.name}** \u2014 a project-specific IDE subagent (${params.slug}).`,\n \"\",\n \"## When invoked\",\n \"\",\n \"1. Clarify the goal and success criteria before acting.\",\n \"2. Follow repository conventions and keep changes minimal.\",\n \"3. Validate external inputs and avoid leaking secrets.\",\n \"\",\n \"## Principles\",\n \"\",\n \"- Prefer strict TypeScript and explicit control flow.\",\n \"- Match existing module boundaries and naming in the codebase.\",\n \"- Surface blockers early instead of guessing requirements.\",\n \"\",\n \"## Project domain context\",\n \"\",\n trimmedPrompt\n ].join(\"\\n\");\n}\n\n/**\n * Builds full `.cursor/agents/<slug>.md` content with YAML frontmatter.\n */\nexport function buildSubagentFileContent(params: BuildSubagentFileContentParams): string {\n const bodyMarkdown = buildSubagentBodyMarkdown(params);\n\n return [\n \"---\",\n `name: ${params.slug}`,\n `description: ${escapeYamlScalar(params.description)}`,\n \"---\",\n \"\",\n bodyMarkdown\n ].join(\"\\n\");\n}\n\nexport interface BuildSubagentFileContentFromBodyParams {\n slug: string;\n description: string;\n bodyMarkdown: string;\n}\n\n/**\n * Builds full `.cursor/agents/<slug>.md` from persisted API fields (frontmatter + stored body).\n */\nexport function buildSubagentFileContentFromBody(params: BuildSubagentFileContentFromBodyParams): string {\n return [\n \"---\",\n `name: ${params.slug}`,\n `description: ${escapeYamlScalar(params.description)}`,\n \"---\",\n \"\",\n params.bodyMarkdown\n ].join(\"\\n\");\n}\n\n/**\n * Builds preview payload fields used by the project subagents API.\n */\nexport function buildSubagentDefinition(params: BuildSubagentDefinitionParams): SubagentDefinitionBuildResult {\n const bodyMarkdown = buildSubagentBodyMarkdown(params);\n const fileContent = buildSubagentFileContent(params);\n\n return { bodyMarkdown, fileContent };\n}\n\nfunction escapeYamlScalar(value: string): string {\n if (/[:#\\n]|^\\s|\\s$/.test(value)) {\n return `\"${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n }\n\n return value;\n}\n", "export { BUILTIN_IDE_SUBAGENT_SLUGS, type BuiltinIdeSubagentSlug } from \"./builtin-ide-subagents.const\";\nexport { validateSubagentLlmInput, type SubagentLlmInputValidationResult } from \"./subagent-llm-input.validator\";\nexport { validateSubagentLlmBodyMarkdown, type SubagentLlmValidationResult } from \"./subagent-llm-output.validator\";\nexport { SUBAGENT_PREVIEW_MODE, type SubagentPreviewMode } from \"./subagent-preview-mode.enum\";\nexport { nameToSubagentSlug, resolveSlugCollision } from \"./slug.util\";\nexport {\n buildSubagentBodyMarkdown,\n buildSubagentDefinition,\n buildSubagentFileContent,\n buildSubagentFileContentFromBody,\n type BuildSubagentDefinitionParams,\n type BuildSubagentFileContentFromBodyParams,\n type BuildSubagentFileContentParams,\n type SubagentDefinitionBuildResult\n} from \"./subagent-definition.builder\";\n", "/**\n * Foundation for multi-tenancy (ADR-001). Until tenant CRUD/switching exists, every\n * tenant-scoped row belongs to this single default tenant. The id is a fixed UUID v4 so\n * the backfill migration and runtime create-paths agree on the same value.\n */\nexport const DEFAULT_TENANT_ID = \"2f3b4c5d-6e7a-4b8c-9d0e-1f2a3b4c5d6e\";\n\nexport const DEFAULT_TENANT_NAME = \"Default Tenant\";\n", "export * from \"./tenancy.consts\";\n", "export const MCP_REDACTED = \"[REDACTED]\";\nexport const MCP_REDACTED_PATH = \"[REDACTED_PATH]\";\nexport const MCP_REDACTED_HOST = \"[REDACTED_HOST]\";\nexport const MCP_REDACTED_PORT = \"[REDACTED_PORT]\";\nexport const MCP_WORKSPACE_PLACEHOLDER = \"[workspace]\";\n\nconst SENSITIVE_OBJECT_KEY_PATTERN =\n /^(password|passwd|secret|clientsecret|client_secret|apikey|api_key|apisecret|api_secret|token|authorization|smtp_password|tokenpepper|token_pepper|privatekey|private_key|pan|cardnumber|card_number)$/i;\n\nconst PAN_PATTERN = /\\b(?:\\d[ -]*?){13,19}\\b/g;\n\nconst BLOCKED_ATTACHMENT_FILE_NAME_PATTERN =\n /^(?:\\.env(?:\\..*)?|secrets\\.ya?ml|config\\.ya?ml|.*\\.pem|.*\\.p12|.*\\.key|id_rsa(?:\\..*)?|credentials\\.json|\\.npmrc|docker-compose\\.ya?ml|compose\\.ya?ml)$/i;\n\nconst JWT_PATTERN = /eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/g;\nconst BEARER_PATTERN = /Bearer\\s+[A-Za-z0-9._~+/=-]+/gi;\nconst DB_URL_PATTERN = /\\b(?:postgres|postgresql|mysql|mongodb)(?:\\+srv)?:\\/\\/\\S+/gi;\nconst URL_CREDENTIALS_PATTERN = /:\\/\\/[^:]+:[^@\\s]+@/g;\nconst PRIVATE_IPV4_PATTERN =\n /\\b(?:10(?:\\.\\d{1,3}){3}|172\\.(?:1[6-9]|2\\d|3[01])(?:\\.\\d{1,3}){2}|192\\.168(?:\\.\\d{1,3}){2})\\b/g;\nconst REMOTE_HOST_PORT_PATTERN =\n /\\b(?!localhost\\b|127\\.0\\.0\\.1\\b)([a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*):(\\d{2,5})\\b/g;\nconst INLINE_SECRET_PATTERN =\n /\\b(password|secret|client[_-]?secret|api[_-]?key|token[_-]?pepper|smtp[_-]?password|private[_-]?key)\\s*[:=]\\s*['\"]?([^\\s'\"]+)/gi;\nconst PEM_BLOCK_PATTERN = /-----BEGIN[A-Z ]+-----[\\s\\S]*?-----END[A-Z ]+-----/g;\nconst DEPLOYMENT_PATH_PATTERN = /\\/(?:app|home|var\\/www|opt)(?:\\/[^\\s'\",\\])}]+)+/g;\nconst HTTPS_REMOTE_URL_PATTERN = /\\bhttps?:\\/\\/(?!localhost\\b|127\\.0\\.0\\.1\\b)[^\\s'\"]+/gi;\nconst ENV_ASSIGNMENT_PATTERN = /\\b(?:TASK_BOARDS|PRIVATE_NPM)[A-Z0-9_]*\\s*=\\s*['\"]?[^\\s'\"]+/gi;\nconst NPM_TOKEN_PATTERN = /NpmToken\\.[A-Za-z0-9._-]+/gi;\n\nexport function isBlockedMcpAttachmentFileName(fileName: string): boolean {\n const baseName = fileName.split(/[/\\\\]/).pop() ?? fileName;\n return BLOCKED_ATTACHMENT_FILE_NAME_PATTERN.test(baseName.trim());\n}\n\nexport function maskWorkspaceRoot(): string {\n return MCP_WORKSPACE_PLACEHOLDER;\n}\n\nexport function toRelativeWorkspacePath(workspaceRoot: string, absolutePath: string): string {\n const normalizedRoot = workspaceRoot.replace(/\\/$/, \"\");\n const normalizedPath = absolutePath.replace(/\\/$/, \"\");\n\n if (normalizedPath === normalizedRoot) {\n return \".\";\n }\n\n const prefix = `${normalizedRoot}/`;\n if (normalizedPath.startsWith(prefix)) {\n return normalizedPath.slice(prefix.length);\n }\n\n return MCP_REDACTED_PATH;\n}\n\nexport function redactSensitiveText(text: string): string {\n let result = text;\n\n result = result.replace(JWT_PATTERN, MCP_REDACTED);\n result = result.replace(BEARER_PATTERN, `Bearer ${MCP_REDACTED}`);\n result = result.replace(DB_URL_PATTERN, `${MCP_REDACTED}_DB_URL`);\n result = result.replace(URL_CREDENTIALS_PATTERN, `://${MCP_REDACTED}@`);\n result = result.replace(PRIVATE_IPV4_PATTERN, MCP_REDACTED_HOST);\n result = result.replace(REMOTE_HOST_PORT_PATTERN, `${MCP_REDACTED_HOST}:${MCP_REDACTED_PORT}`);\n result = result.replace(INLINE_SECRET_PATTERN, (_match, key: string) => `${key}: ${MCP_REDACTED}`);\n result = result.replace(PEM_BLOCK_PATTERN, MCP_REDACTED);\n result = result.replace(DEPLOYMENT_PATH_PATTERN, MCP_REDACTED_PATH);\n result = result.replace(HTTPS_REMOTE_URL_PATTERN, `${MCP_REDACTED_HOST}/...`);\n result = result.replace(ENV_ASSIGNMENT_PATTERN, `${MCP_REDACTED}_ENV`);\n result = result.replace(NPM_TOKEN_PATTERN, `NpmToken.${MCP_REDACTED}`);\n result = result.replace(PAN_PATTERN, MCP_REDACTED);\n\n return result;\n}\n\nexport function redactSensitiveValueDeep<T>(value: T, workspaceRoot?: string): T {\n return redactSensitiveValueDeepInternal(value, undefined, workspaceRoot) as T;\n}\n\nfunction redactSensitiveValueDeepInternal(value: unknown, key: string | undefined, workspaceRoot?: string): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === \"string\") {\n if (key === \"workspaceRoot\") {\n return MCP_WORKSPACE_PLACEHOLDER;\n }\n\n if (key !== undefined && SENSITIVE_OBJECT_KEY_PATTERN.test(key)) {\n return MCP_REDACTED;\n }\n\n return redactSensitiveText(value);\n }\n\n if (Array.isArray(value)) {\n return value.map(item => redactSensitiveValueDeepInternal(item, undefined, workspaceRoot));\n }\n\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const redacted: Record<string, unknown> = {};\n\n for (const [entryKey, entryValue] of Object.entries(record)) {\n if (SENSITIVE_OBJECT_KEY_PATTERN.test(entryKey)) {\n redacted[entryKey] = entryValue === null ? null : MCP_REDACTED;\n continue;\n }\n\n if (entryKey === \"workspaceRoot\" && typeof entryValue === \"string\") {\n redacted[entryKey] = MCP_WORKSPACE_PLACEHOLDER;\n continue;\n }\n\n if (\n (entryKey === \"path\" || entryKey === \"stagingDir\" || entryKey === \"directory\") &&\n typeof entryValue === \"string\"\n ) {\n redacted[entryKey] =\n workspaceRoot !== undefined && workspaceRoot.trim() !== \"\"\n ? toRelativeWorkspacePath(workspaceRoot, entryValue)\n : MCP_REDACTED_PATH;\n continue;\n }\n\n redacted[entryKey] = redactSensitiveValueDeepInternal(entryValue, entryKey, workspaceRoot);\n }\n\n return redacted;\n }\n\n return value;\n}\n", "import {\n MCP_REDACTED,\n MCP_REDACTED_PATH,\n redactSensitiveText,\n redactSensitiveValueDeep,\n toRelativeWorkspacePath\n} from \"./mcp-sensitive-data.util\";\n\nexport interface SanitizeMcpToolResultOptions {\n workspaceRoot?: string;\n}\n\nconst PATH_FIELD_KEYS = new Set([\"path\", \"stagingDir\", \"directory\"]);\nconst OMIT_FIELD_KEYS = new Set([\"commitMessage\", \"sourcePrompt\"]);\n\nconst ECONNREFUSED_PATTERN = /\\bconnect ECONNREFUSED\\b[^\\n]*/gi;\nconst ABSOLUTE_PATH_IN_MESSAGE_PATTERN = /(?<=[\\s:(])(\\/[\\w@./-]+)/g;\nconst ENV_ASSIGNMENT_PATTERN = /\\b(?:TASK_BOARDS|PRIVATE_NPM)[A-Z0-9_]*\\s*=\\s*['\"]?[^\\s'\"]+/gi;\nconst NPM_TOKEN_PATTERN = /NpmToken\\.[A-Za-z0-9._-]+/gi;\n\nexport function sanitizeMcpErrorMessage(message: string): string {\n let result = redactSensitiveText(message);\n result = result.replace(ECONNREFUSED_PATTERN, \"Connection refused\");\n result = result.replace(ENV_ASSIGNMENT_PATTERN, \"[REDACTED_ENV]\");\n result = result.replace(NPM_TOKEN_PATTERN, `NpmToken.${MCP_REDACTED}`);\n result = result.replace(ABSOLUTE_PATH_IN_MESSAGE_PATTERN, MCP_REDACTED_PATH);\n return result;\n}\n\nexport function sanitizeMcpToolResult<T>(value: T, options?: SanitizeMcpToolResultOptions): T {\n try {\n const redacted = redactSensitiveValueDeep(value, options?.workspaceRoot);\n return applyMcpDomainRules(redacted, options?.workspaceRoot) as T;\n } catch {\n return value;\n }\n}\n\nfunction applyMcpDomainRules(value: unknown, workspaceRoot?: string): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(item => applyMcpDomainRules(item, workspaceRoot));\n }\n\n if (typeof value !== \"object\") {\n return value;\n }\n\n const record = value as Record<string, unknown>;\n const sanitized: Record<string, unknown> = {};\n\n for (const [key, entryValue] of Object.entries(record)) {\n if (OMIT_FIELD_KEYS.has(key)) {\n continue;\n }\n\n if (PATH_FIELD_KEYS.has(key) && typeof entryValue === \"string\") {\n sanitized[key] = redactPathField(entryValue, workspaceRoot);\n continue;\n }\n\n sanitized[key] = applyMcpDomainRules(entryValue, workspaceRoot);\n }\n\n return sanitized;\n}\n\nfunction redactPathField(pathValue: string, workspaceRoot?: string): string {\n const isAbsolutePath = pathValue.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(pathValue);\n\n if (isAbsolutePath && workspaceRoot !== undefined && workspaceRoot.trim() !== \"\") {\n return toRelativeWorkspacePath(workspaceRoot, pathValue);\n }\n\n if (isAbsolutePath) {\n return MCP_REDACTED_PATH;\n }\n\n return redactSensitiveText(pathValue);\n}\n", "export * from \"./mcp-sensitive-data.util\";\nexport * from \"./sanitize-mcp-tool-result.util\";\n", "export * from \"@task-boards/api\";\nexport * from \"./board-presets\";\nexport * from \"./subscriptions\";\nexport * from \"./internal\";\nexport * from \"./realtime/realtime.consts\";\nexport * from \"./realtime/realtime.events\";\nexport * from \"./realtime/realtime.types\";\nexport * from \"./work-items/work-items.display-key.util\";\nexport * from \"./git/story-branch.util\";\nexport * from \"./git/work-item-commit.util\";\nexport * from \"./workflows\";\nexport * from \"./subagent-role\";\nexport * from \"./subagent\";\nexport * from \"./tenancy\";\nexport * from \"./mcp-data-protection\";\n", "import { AGENT_RUNS_ROUTES } from \"@task-boards/api/agent-runs/agent-runs.api\";\nimport type {\n AgentRunResponse,\n CompleteAgentRunRequest,\n CompleteAgentRunResponse,\n SetAgentRunAttentionRequest\n} from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport type { CommentResponse } from \"@task-boards/api/comments/comments.types\";\nimport { BUILTIN_IDE_SUBAGENT_SLUGS } from \"@task-boards/shared\";\n\nimport { downloadWorkItemAttachments, fetchAttachments } from \"../tools/attachments.js\";\nimport { postComment } from \"../tools/comments.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { syncProjectSubagents } from \"../subagents/sync-project-subagents.js\";\nimport {\n fetchInflightAgentRuns,\n pollAgentRuns,\n type PollAgentRunsDeps,\n type PollAgentRunsOptions,\n type PollAgentRunsResult\n} from \"../tools/wait-for-agent-runs.js\";\n\nexport interface OrchestratorTransportOptions {\n workspaceRoot?: string;\n blockSensitiveAttachments?: boolean;\n}\n\nexport function isProjectCustomSubagentSlug(slug: string | null): slug is string {\n if (slug === null || slug.trim() === \"\") {\n return false;\n }\n\n return !(BUILTIN_IDE_SUBAGENT_SLUGS as readonly string[]).includes(slug);\n}\n\nexport class OrchestratorTransport {\n constructor(\n private readonly client: RestClient,\n private readonly options: OrchestratorTransportOptions = {}\n ) {}\n\n async claimAndPoll(options: PollAgentRunsOptions, deps?: PollAgentRunsDeps): Promise<PollAgentRunsResult> {\n return pollAgentRuns(this.client, options, deps);\n }\n\n async fetchInflightRuns(projectId: string, limit?: number): Promise<AgentRunResponse[]> {\n return fetchInflightAgentRuns(this.client, { projectId, limit });\n }\n\n async ackRun(agentRunId: string, note?: string | null): Promise<AgentRunResponse> {\n const body = note !== undefined ? { note } : undefined;\n return this.client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.acknowledgeAgentRun(agentRunId), body);\n }\n\n async setAttention(\n agentRunId: string,\n requiresAttention: boolean,\n message?: string | null\n ): Promise<AgentRunResponse> {\n const body: SetAgentRunAttentionRequest = requiresAttention\n ? { requiresAttention: true, attentionMessage: message ?? \"\" }\n : { requiresAttention: false };\n\n return this.client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.setAgentRunAttention(agentRunId), body);\n }\n\n async completeRun(agentRunId: string, body?: CompleteAgentRunRequest): Promise<CompleteAgentRunResponse> {\n return this.client.post<CompleteAgentRunResponse>(AGENT_RUNS_ROUTES.completeAgentRun(agentRunId), body);\n }\n\n async listAttachments(workItemId: string): ReturnType<typeof fetchAttachments> {\n return fetchAttachments(this.client, workItemId);\n }\n\n async downloadAttachments(\n workItemId: string,\n workspaceRoot: string,\n attachmentIds?: string[]\n ): ReturnType<typeof downloadWorkItemAttachments> {\n return downloadWorkItemAttachments(this.client, {\n workItemId,\n workspaceRoot,\n attachmentIds,\n blockSensitiveAttachments: this.options.blockSensitiveAttachments ?? true\n });\n }\n\n async syncSubagents(projectId: string, workspaceRoot: string): ReturnType<typeof syncProjectSubagents> {\n return syncProjectSubagents(this.client, { projectId, workspaceRoot });\n }\n\n async createComment(workItemId: string, body: string): Promise<CommentResponse> {\n return postComment(this.client, workItemId, body);\n }\n}\n\nexport function createOrchestratorTransport(\n client: RestClient,\n config?: { workspaceRoot?: string; blockSensitiveAttachments?: boolean }\n): OrchestratorTransport {\n return new OrchestratorTransport(client, {\n workspaceRoot: config?.workspaceRoot,\n blockSensitiveAttachments: config?.blockSensitiveAttachments\n });\n}\n", "import { existsSync } from \"node:fs\";\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { ATTACHMENTS_ROUTES } from \"@task-boards/api/attachments/attachments.api\";\nimport type { AttachmentListResponse, AttachmentResponse } from \"@task-boards/api/attachments/attachments.types\";\nimport { isBlockedMcpAttachmentFileName } from \"@task-boards/shared\";\nimport { z } from \"zod\";\n\nimport { detectMimeType } from \"../attachments/detect-mime-type.js\";\nimport { buildStagingDir, buildStagingPath, writeStagingFile } from \"../attachments/staging.util.js\";\nimport type { McpServerConfig } from \"../config.js\";\nimport { RestClientError, type RestClient } from \"../rest-client.js\";\nimport { readConfinedWorkspaceFile } from \"../workspace/confine-file-path.js\";\nimport { resolveWorkspaceRoot } from \"../workspace/resolve-workspace-root.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nconst MAX_ATTACHMENT_COUNT = 20;\nconst MAX_TOTAL_BYTES = 200 * 1024 * 1024;\n\nexport interface DownloadWorkItemAttachmentsResult {\n workItemId: string;\n downloaded: { attachmentId: string; fileName: string; path: string; sizeBytes: number }[];\n skipped: { attachmentId: string; reason: string }[];\n stagingDir: string;\n}\n\nexport interface UploadWorkItemAttachmentResult {\n workItemId: string;\n attachment: AttachmentResponse;\n sourcePath: string;\n}\n\nexport async function fetchAttachments(client: RestClient, workItemId: string): Promise<AttachmentListResponse> {\n return client.get<AttachmentListResponse>(ATTACHMENTS_ROUTES.listAttachments(workItemId));\n}\n\nfunction filterAttachments(items: AttachmentResponse[], attachmentIds?: string[]): AttachmentResponse[] {\n if (attachmentIds === undefined || attachmentIds.length === 0) {\n return items;\n }\n const idSet = new Set(attachmentIds);\n return items.filter(item => idSet.has(item.id));\n}\n\nfunction assertDownloadLimits(attachments: AttachmentResponse[]): void {\n if (attachments.length > MAX_ATTACHMENT_COUNT) {\n throw new RestClientError(\n \"ATTACHMENT_LIMIT_EXCEEDED\",\n `Cannot download more than ${MAX_ATTACHMENT_COUNT} attachments at once (requested ${attachments.length})`\n );\n }\n\n const totalBytes = attachments.reduce((sum, attachment) => sum + attachment.sizeBytes, 0);\n if (totalBytes > MAX_TOTAL_BYTES) {\n throw new RestClientError(\n \"ATTACHMENT_SIZE_LIMIT_EXCEEDED\",\n `Total attachment size ${totalBytes} bytes exceeds limit of ${MAX_TOTAL_BYTES} bytes`\n );\n }\n}\n\nexport async function downloadWorkItemAttachments(\n client: RestClient,\n params: {\n workItemId: string;\n workspaceRoot: string;\n attachmentIds?: string[];\n overwrite?: boolean;\n blockSensitiveAttachments?: boolean;\n }\n): Promise<DownloadWorkItemAttachmentsResult> {\n const { workItemId, workspaceRoot, attachmentIds, overwrite = false, blockSensitiveAttachments = true } = params;\n const listResponse = await fetchAttachments(client, workItemId);\n const selected = filterAttachments(listResponse.items, attachmentIds);\n assertDownloadLimits(selected);\n\n const stagingDir = buildStagingDir(workspaceRoot, workItemId);\n const downloaded: DownloadWorkItemAttachmentsResult[\"downloaded\"] = [];\n const skipped: DownloadWorkItemAttachmentsResult[\"skipped\"] = [];\n\n if (attachmentIds !== undefined && attachmentIds.length > 0) {\n const selectedIds = new Set(selected.map(item => item.id));\n for (const attachmentId of attachmentIds) {\n if (!selectedIds.has(attachmentId)) {\n skipped.push({ attachmentId, reason: \"not found on work item\" });\n }\n }\n }\n\n for (const attachment of selected) {\n if (blockSensitiveAttachments && isBlockedMcpAttachmentFileName(attachment.fileName)) {\n skipped.push({ attachmentId: attachment.id, reason: \"blocked_sensitive_filename\" });\n continue;\n }\n\n const stagingPath = buildStagingPath(workspaceRoot, workItemId, attachment.id, attachment.fileName);\n if (!overwrite && existsSync(stagingPath)) {\n skipped.push({ attachmentId: attachment.id, reason: \"file already exists (set overwrite=true to replace)\" });\n continue;\n }\n\n const { data } = await client.downloadBinary(ATTACHMENTS_ROUTES.downloadAttachment(workItemId, attachment.id));\n await writeStagingFile(stagingPath, data);\n downloaded.push({\n attachmentId: attachment.id,\n fileName: attachment.fileName,\n path: stagingPath,\n sizeBytes: data.length\n });\n }\n\n return {\n workItemId,\n downloaded,\n skipped,\n stagingDir\n };\n}\n\nexport async function uploadWorkItemAttachment(\n client: RestClient,\n params: {\n workItemId: string;\n workspaceRoot: string;\n filePath: string;\n blockSensitiveAttachments?: boolean;\n }\n): Promise<UploadWorkItemAttachmentResult> {\n const { workItemId, workspaceRoot, filePath, blockSensitiveAttachments = true } = params;\n const confinedFile = readConfinedWorkspaceFile(workspaceRoot, filePath);\n\n if (blockSensitiveAttachments && isBlockedMcpAttachmentFileName(confinedFile.fileName)) {\n throw new RestClientError(\n \"BLOCKED_SENSITIVE_FILENAME\",\n `Attachment filename is blocked for MCP upload: ${confinedFile.fileName}`\n );\n }\n\n const mimeType = detectMimeType(confinedFile.absolutePath);\n const attachment = await client.uploadMultipart<AttachmentResponse>(\n ATTACHMENTS_ROUTES.uploadAttachment(workItemId),\n \"file\",\n {\n buffer: confinedFile.buffer,\n fileName: confinedFile.fileName,\n mimeType\n }\n );\n\n return {\n workItemId,\n attachment,\n sourcePath: confinedFile.absolutePath\n };\n}\n\nexport function registerAttachmentTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"list_work_item_attachments\",\n {\n description: \"List file attachments for a work item.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) => runTool(async () => fetchAttachments(client, workItemId))\n );\n\n server.registerTool(\n \"download_work_item_attachments\",\n {\n description:\n \"Download work item attachments into the local workspace staging directory (.task-boards/attachments).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n attachmentIds: z\n .array(z.string().uuid())\n .optional()\n .describe(\"Optional subset of attachment UUIDs; downloads all when omitted\"),\n overwrite: z.boolean().optional().default(false).describe(\"Replace existing staged files when true\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to git repo root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ workItemId, attachmentIds, overwrite, workspaceRoot }) => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return runTool(\n async () =>\n downloadWorkItemAttachments(client, {\n workItemId,\n workspaceRoot: resolvedWorkspaceRoot,\n attachmentIds,\n overwrite,\n blockSensitiveAttachments: config.blockSensitiveAttachments\n }),\n { workspaceRoot: resolvedWorkspaceRoot }\n );\n }\n );\n\n server.registerTool(\n \"upload_work_item_attachment\",\n {\n description: \"Upload a local workspace file as a work item attachment (multipart field file).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n filePath: z\n .string()\n .describe(\"Absolute or workspace-relative path to the file; must stay within workspaceRoot\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to git repo root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ workItemId, filePath, workspaceRoot }) => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return runTool(\n async () =>\n uploadWorkItemAttachment(client, {\n workItemId,\n workspaceRoot: resolvedWorkspaceRoot,\n filePath,\n blockSensitiveAttachments: config.blockSensitiveAttachments\n }),\n { workspaceRoot: resolvedWorkspaceRoot }\n );\n }\n );\n}\n", "import { basename } from \"node:path\";\n\nimport { lookup as lookupMimeType } from \"mime-types\";\n\nexport function detectMimeType(filePath: string): string {\n const mimeType = lookupMimeType(basename(filePath));\n return typeof mimeType === \"string\" ? mimeType : \"application/octet-stream\";\n}\n", "import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nconst MAX_FILE_NAME_LENGTH = 200;\n\nexport function sanitizeFileName(name: string): string {\n const baseName = name.split(/[/\\\\]/).pop() ?? name;\n const sanitized = baseName.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n return sanitized.length > MAX_FILE_NAME_LENGTH ? sanitized.slice(0, MAX_FILE_NAME_LENGTH) : sanitized;\n}\n\nexport function buildStagingPath(\n workspaceRoot: string,\n workItemId: string,\n attachmentId: string,\n fileName: string\n): string {\n const sanitizedFileName = sanitizeFileName(fileName);\n return resolve(workspaceRoot, \".task-boards\", \"attachments\", workItemId, `${attachmentId}_${sanitizedFileName}`);\n}\n\nexport function buildStagingDir(workspaceRoot: string, workItemId: string): string {\n return resolve(workspaceRoot, \".task-boards\", \"attachments\", workItemId);\n}\n\nexport async function writeStagingFile(path: string, data: Buffer): Promise<void> {\n const absolutePath = resolve(path);\n await mkdir(dirname(absolutePath), { recursive: true });\n await writeFile(absolutePath, data);\n}\n", "import axios, { type AxiosInstance, type AxiosRequestConfig, isAxiosError } from \"axios\";\nimport FormData from \"form-data\";\nimport { sanitizeMcpErrorMessage } from \"@task-boards/shared\";\n\nexport interface ApiErrorBody {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport class RestClientError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status?: number\n ) {\n super(message);\n this.name = \"RestClientError\";\n }\n}\n\nexport class RestClient {\n private readonly client: AxiosInstance;\n\n constructor(baseUrl: string, apiToken: string | undefined) {\n this.client = axios.create({\n baseURL: baseUrl,\n headers: apiToken !== undefined && apiToken.length > 0 ? { Authorization: `Bearer ${apiToken}` } : {}\n });\n }\n\n async get<T>(path: string, params?: Record<string, string | undefined>): Promise<T> {\n const config: AxiosRequestConfig = {};\n if (params !== undefined) {\n config.params = Object.fromEntries(\n Object.entries(params).filter((entry): entry is [string, string] => entry[1] !== undefined)\n );\n }\n return this.request<T>({ method: \"GET\", url: path, ...config });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: \"POST\", url: path, data: body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>({ method: \"PATCH\", url: path, data: body });\n }\n\n async delete(path: string, body?: unknown): Promise<void> {\n await this.request<void>({ method: \"DELETE\", url: path, data: body });\n }\n\n async uploadMultipart<T>(\n path: string,\n fieldName: string,\n file: { buffer: Buffer; fileName: string; mimeType: string }\n ): Promise<T> {\n const form = new FormData();\n form.append(fieldName, file.buffer, {\n filename: file.fileName,\n contentType: file.mimeType\n });\n\n return this.request<T>({\n method: \"POST\",\n url: path,\n data: form,\n headers: form.getHeaders()\n });\n }\n\n async downloadBinary(path: string): Promise<{ data: Buffer; contentType: string }> {\n try {\n const response = await this.client.request<ArrayBuffer>({\n method: \"GET\",\n url: path,\n responseType: \"arraybuffer\"\n });\n const rawContentType: unknown = response.headers[\"content-type\"];\n const contentType = typeof rawContentType === \"string\" ? rawContentType : \"application/octet-stream\";\n return {\n data: Buffer.from(response.data),\n contentType\n };\n } catch (error: unknown) {\n if (isAxiosError(error)) {\n const body: unknown = error.response?.data;\n if (this.isApiErrorBody(body)) {\n throw new RestClientError(body.code, body.message, error.response?.status);\n }\n throw new RestClientError(\"HTTP_ERROR\", this.sanitizeHttpErrorMessage(error.message), error.response?.status);\n }\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new RestClientError(\"INTERNAL_ERROR\", sanitizeMcpErrorMessage(message));\n }\n }\n\n private async request<T>(config: AxiosRequestConfig): Promise<T> {\n try {\n const response = await this.client.request<T>(config);\n return response.data;\n } catch (error: unknown) {\n if (isAxiosError(error)) {\n const body: unknown = error.response?.data;\n if (this.isApiErrorBody(body)) {\n throw new RestClientError(body.code, body.message, error.response?.status);\n }\n throw new RestClientError(\"HTTP_ERROR\", this.sanitizeHttpErrorMessage(error.message), error.response?.status);\n }\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new RestClientError(\"INTERNAL_ERROR\", sanitizeMcpErrorMessage(message));\n }\n }\n\n private sanitizeHttpErrorMessage(message: string): string {\n const trimmed = message.trim();\n if (trimmed.length === 0) {\n return \"HTTP request failed\";\n }\n\n return sanitizeMcpErrorMessage(trimmed);\n }\n\n private isApiErrorBody(value: unknown): value is ApiErrorBody {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"code\" in value &&\n \"message\" in value &&\n typeof value.code === \"string\" &&\n typeof value.message === \"string\"\n );\n }\n}\n", "import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { basename, isAbsolute, relative, resolve } from \"node:path\";\n\nimport { WorkspaceError } from \"./workspace-error.js\";\n\nexport interface ConfinedWorkspaceFile {\n absolutePath: string;\n fileName: string;\n sizeBytes: number;\n buffer: Buffer;\n}\n\nexport function confineFilePath(workspaceRoot: string, filePath: string): string {\n const resolvedRoot = resolve(workspaceRoot);\n const resolvedPath = isAbsolute(filePath) ? resolve(filePath) : resolve(resolvedRoot, filePath);\n const relativePath = relative(resolvedRoot, resolvedPath);\n\n if (relativePath.startsWith(\"..\") || isAbsolute(relativePath)) {\n throw new WorkspaceError(\n \"FILE_OUT_OF_BOUNDS\",\n `filePath is outside workspaceRoot: ${basename(filePath) || filePath}`\n );\n }\n\n if (!existsSync(resolvedPath)) {\n throw new WorkspaceError(\"FILE_NOT_FOUND\", `filePath does not exist: ${basename(filePath) || filePath}`);\n }\n\n const stats = statSync(resolvedPath);\n if (!stats.isFile()) {\n throw new WorkspaceError(\"FILE_NOT_FOUND\", `filePath is not a file: ${basename(filePath) || filePath}`);\n }\n\n return resolvedPath;\n}\n\nexport function readConfinedWorkspaceFile(workspaceRoot: string, filePath: string): ConfinedWorkspaceFile {\n const absolutePath = confineFilePath(workspaceRoot, filePath);\n const stats = statSync(absolutePath);\n const buffer = readFileSync(absolutePath);\n\n return {\n absolutePath,\n fileName: basename(absolutePath),\n sizeBytes: stats.size,\n buffer\n };\n}\n", "export class WorkspaceError extends Error {\n constructor(\n public readonly code: string,\n message: string\n ) {\n super(message);\n this.name = \"WorkspaceError\";\n }\n}\n", "import { existsSync, statSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\n\nimport { WorkspaceError } from \"./workspace-error.js\";\n\nconst TASK_BOARDS_FILE = \".task-boards.yaml\";\nconst MAX_UPWARD_LEVELS = 20;\n\nfunction assertDirectory(path: string, source: string): string {\n const absolutePath = resolve(path);\n if (!existsSync(absolutePath)) {\n throw new WorkspaceError(\"WORKSPACE_NOT_FOUND\", `${source} does not exist: ${absolutePath}`);\n }\n const stats = statSync(absolutePath);\n if (!stats.isDirectory()) {\n throw new WorkspaceError(\"WORKSPACE_NOT_FOUND\", `${source} is not a directory: ${absolutePath}`);\n }\n return absolutePath;\n}\n\nfunction assertWithinAllowedRoot(target: string, allowedRoot: string): void {\n const relativePath = relative(allowedRoot, target);\n const isNested = relativePath !== \"\" && !relativePath.startsWith(\"..\") && !isAbsolute(relativePath);\n if (target !== allowedRoot && !isNested) {\n throw new WorkspaceError(\n \"WORKSPACE_OUT_OF_BOUNDS\",\n `workspaceRoot is outside the allowed WORKSPACE_ROOT: ${target}`\n );\n }\n}\n\nfunction assertGitRepository(absolutePath: string): void {\n if (!existsSync(join(absolutePath, \".git\"))) {\n throw new WorkspaceError(\"WORKSPACE_NOT_GIT_REPO\", `workspaceRoot is not a git repository: ${absolutePath}`);\n }\n}\n\nfunction findWorkspaceRootUpward(startDir: string): string | null {\n let current = resolve(startDir);\n for (let level = 0; level <= MAX_UPWARD_LEVELS; level += 1) {\n const markerPath = join(current, TASK_BOARDS_FILE);\n if (existsSync(markerPath)) {\n return current;\n }\n const parent = dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n return null;\n}\n\nexport function resolveWorkspaceRoot(explicitOverride?: string, envWorkspaceRoot?: string): string {\n const allowedRoot =\n envWorkspaceRoot !== undefined && envWorkspaceRoot.trim() !== \"\"\n ? assertDirectory(envWorkspaceRoot, \"WORKSPACE_ROOT\")\n : undefined;\n\n if (explicitOverride !== undefined && explicitOverride.trim() !== \"\") {\n const resolved = assertDirectory(explicitOverride, \"workspaceRoot\");\n // A client-supplied path is untrusted: confine it to the configured allowed\n // root when one is set, otherwise require it to be an actual git repository.\n if (allowedRoot !== undefined) {\n assertWithinAllowedRoot(resolved, allowedRoot);\n } else {\n assertGitRepository(resolved);\n }\n return resolved;\n }\n\n if (allowedRoot !== undefined) {\n return allowedRoot;\n }\n\n const fromMarker = findWorkspaceRootUpward(process.cwd());\n if (fromMarker !== null) {\n return fromMarker;\n }\n\n return resolve(process.cwd());\n}\n", "import type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { sanitizeMcpErrorMessage, sanitizeMcpToolResult } from \"@task-boards/shared\";\n\nimport { RestClientError } from \"../rest-client.js\";\nimport { shouldSanitizeResponses } from \"../tool-runtime.js\";\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\nexport interface RunToolOptions {\n workspaceRoot?: string;\n}\n\nexport function jsonResult(data: unknown): CallToolResult {\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }]\n };\n}\n\nexport function toolError(code: string, message: string): CallToolResult {\n const sanitizedMessage = shouldSanitizeResponses() ? sanitizeMcpErrorMessage(message) : message;\n\n return {\n isError: true,\n content: [{ type: \"text\", text: JSON.stringify({ code, message: sanitizedMessage }) }]\n };\n}\n\nexport function toToolError(error: unknown): CallToolResult {\n if (error instanceof RestClientError || error instanceof WorkspaceError) {\n return toolError(error.code, error.message);\n }\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return toolError(\"INTERNAL_ERROR\", message);\n}\n\nexport async function runTool(handler: () => Promise<unknown>, options?: RunToolOptions): Promise<CallToolResult> {\n try {\n let data = await handler();\n\n if (shouldSanitizeResponses()) {\n data = sanitizeMcpToolResult(data, { workspaceRoot: options?.workspaceRoot });\n }\n\n return jsonResult(data);\n } catch (error: unknown) {\n return toToolError(error);\n }\n}\n", "import type { McpServerConfig } from \"./config.js\";\n\nlet serverConfig: McpServerConfig | null = null;\n\nexport function initToolRuntime(config: McpServerConfig): void {\n serverConfig = config;\n}\n\nexport function getServerConfig(): McpServerConfig | null {\n return serverConfig;\n}\n\nexport function shouldSanitizeResponses(): boolean {\n if (serverConfig === null) {\n return true;\n }\n\n return serverConfig.sanitizeResponses !== false;\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { COMMENTS_ROUTES } from \"@task-boards/api/comments/comments.api\";\nimport type {\n CommentListResponse,\n CommentResponse,\n CreateCommentRequest\n} from \"@task-boards/api/comments/comments.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport async function fetchComments(client: RestClient, workItemId: string): Promise<CommentListResponse> {\n return client.get<CommentListResponse>(COMMENTS_ROUTES.listComments(workItemId));\n}\n\nexport async function postComment(client: RestClient, workItemId: string, body: string): Promise<CommentResponse> {\n const request: CreateCommentRequest = { body };\n return client.post<CommentResponse>(COMMENTS_ROUTES.createComment(workItemId), request);\n}\n\nexport function registerCommentTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_comments\",\n {\n description: \"List comments for a work item (newest last).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) => runTool(async () => fetchComments(client, workItemId))\n );\n\n server.registerTool(\n \"create_comment\",\n {\n description:\n \"Create a comment on a work item. Use for orchestrator NEEDS_CLARIFICATION questions before complete_agent_run.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n body: z.string().min(1).describe(\"Comment body (markdown supported)\")\n }\n },\n async ({ workItemId, body }) => runTool(async () => postComment(client, workItemId, body))\n );\n}\n", "import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport {\n buildSubagentFileContentFromBody,\n PROJECT_SUBAGENTS_ROUTES,\n type SubagentListResponse,\n type SubagentResponse\n} from \"@task-boards/shared\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nconst SAFE_SUBAGENT_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\nconst MAX_SUBAGENT_SLUG_LENGTH = 64;\n\nexport interface SyncProjectSubagentsParams {\n projectId: string;\n workspaceRoot: string;\n}\n\nexport interface SyncProjectSubagentsResult {\n synced: string[];\n skipped: string[];\n directory: string;\n}\n\nfunction isSyncableSlug(slug: string): boolean {\n const trimmed = slug.trim();\n return trimmed.length > 0 && trimmed.length <= MAX_SUBAGENT_SLUG_LENGTH && SAFE_SUBAGENT_SLUG_PATTERN.test(trimmed);\n}\n\nfunction buildFileContent(subagent: SubagentResponse): string {\n return buildSubagentFileContentFromBody({\n slug: subagent.slug,\n description: subagent.description,\n bodyMarkdown: subagent.bodyMarkdown\n });\n}\n\nexport async function syncProjectSubagents(\n client: RestClient,\n params: SyncProjectSubagentsParams\n): Promise<SyncProjectSubagentsResult> {\n const { projectId, workspaceRoot } = params;\n const listResponse = await client.get<SubagentListResponse>(PROJECT_SUBAGENTS_ROUTES.listSubagents(projectId));\n const directory = join(workspaceRoot, \".cursor\", \"agents\");\n\n mkdirSync(directory, { recursive: true });\n\n const synced: string[] = [];\n const skipped: string[] = [];\n\n for (const subagent of listResponse.items) {\n if (!isSyncableSlug(subagent.slug)) {\n skipped.push(subagent.slug);\n continue;\n }\n\n const filePath = join(directory, `${subagent.slug}.md`);\n writeFileSync(filePath, buildFileContent(subagent), \"utf8\");\n synced.push(subagent.slug);\n }\n\n return { synced, skipped, directory };\n}\n", "import { AGENT_RUNS_ROUTES } from \"@task-boards/api/agent-runs/agent-runs.api\";\nimport type {\n AgentRunPageResponse,\n AgentRunResponse,\n ClaimAgentRunsResponse\n} from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\n\nimport { type RestClient, RestClientError } from \"../rest-client.js\";\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\n/** Default base delay before retrying a transient claim failure. */\nconst DEFAULT_RETRY_BASE_MS = 500;\n/** Default ceiling for the exponential retry backoff. */\nconst DEFAULT_RETRY_MAX_MS = 30_000;\n/** Default max inflight runs when limit is omitted. */\nconst DEFAULT_INFLIGHT_LIMIT = 10;\n\nexport interface PollAgentRunsOptions {\n projectId: string;\n timeoutMs: number;\n pollIntervalMs: number;\n /** Max runs to claim per poll; default 1. */\n limit?: number;\n /** Base backoff for transient claim failures; default {@link DEFAULT_RETRY_BASE_MS}. */\n retryBaseMs?: number;\n /** Ceiling for the exponential retry backoff; default {@link DEFAULT_RETRY_MAX_MS}. */\n retryMaxMs?: number;\n}\n\nexport interface FetchInflightRunsOptions {\n projectId: string;\n /** Max runs to return; default {@link DEFAULT_INFLIGHT_LIMIT}. */\n limit?: number;\n}\n\nexport interface PollAgentRunsResult {\n /** Newly claimed PENDING\u2192DISPATCHED runs (unchanged semantics). */\n items: AgentRunResponse[];\n /** Resume candidates: existing DISPATCHED or ACKNOWLEDGED (not re-claimed). */\n inflightRuns: AgentRunResponse[];\n timedOut: boolean;\n}\n\nexport interface PollAgentRunsDeps {\n sleep: (ms: number) => Promise<void>;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\n/**\n * A claim failure is transient when it is safe to retry: network/timeout errors\n * (no HTTP status) and 5xx upstream responses. Auth/validation 4xx and unexpected\n * non-REST errors are non-transient and must propagate.\n */\nfunction isTransientClaimError(error: unknown): boolean {\n if (!(error instanceof RestClientError)) {\n return false;\n }\n if (error.status === undefined) {\n return error.code === \"HTTP_ERROR\";\n }\n return error.status >= 500;\n}\n\nfunction computeBackoffMs(consecutiveFailures: number, baseMs: number, maxMs: number): number {\n const exponential = baseMs * 2 ** (consecutiveFailures - 1);\n return Math.min(exponential, maxMs);\n}\n\nfunction compareInflightRuns(a: AgentRunResponse, b: AgentRunResponse): number {\n if (a.requiresAttention !== b.requiresAttention) {\n return a.requiresAttention ? -1 : 1;\n }\n\n const aDispatched = a.dispatchedAt ?? \"\";\n const bDispatched = b.dispatchedAt ?? \"\";\n return aDispatched.localeCompare(bDispatched);\n}\n\n/**\n * Lists in-flight DISPATCHED and ACKNOWLEDGED runs for orphan recovery.\n * Excludes PENDING (claim-only) runs.\n */\nexport async function fetchInflightAgentRuns(\n client: RestClient,\n options: FetchInflightRunsOptions\n): Promise<AgentRunResponse[]> {\n const limit = options.limit ?? DEFAULT_INFLIGHT_LIMIT;\n\n const page = await client.get<AgentRunPageResponse>(AGENT_RUNS_ROUTES.listAgentRuns(), {\n projectId: options.projectId,\n activeOnly: \"true\",\n limit: String(limit)\n });\n\n const filtered = page.items.filter(\n run => run.status === AGENT_RUN_STATUS.DISPATCHED || run.status === AGENT_RUN_STATUS.ACKNOWLEDGED\n );\n\n filtered.sort(compareInflightRuns);\n\n return filtered.slice(0, limit);\n}\n\nexport async function pollAgentRuns(\n client: RestClient,\n options: PollAgentRunsOptions,\n deps?: PollAgentRunsDeps\n): Promise<PollAgentRunsResult> {\n const { projectId, timeoutMs, pollIntervalMs, limit } = options;\n\n if (pollIntervalMs > timeoutMs) {\n throw new WorkspaceError(\"VALIDATION_ERROR\", \"pollInterval must not exceed timeout\");\n }\n\n const sleepFn = deps?.sleep ?? sleep;\n const deadline = Date.now() + timeoutMs;\n const claimLimit = limit ?? 1;\n const retryBaseMs = options.retryBaseMs ?? DEFAULT_RETRY_BASE_MS;\n const retryMaxMs = options.retryMaxMs ?? DEFAULT_RETRY_MAX_MS;\n\n let consecutiveFailures = 0;\n\n while (true) {\n let response: ClaimAgentRunsResponse;\n try {\n response = await client.post<ClaimAgentRunsResponse>(AGENT_RUNS_ROUTES.claimAgentRuns(), {\n projectId,\n limit: claimLimit\n });\n consecutiveFailures = 0;\n } catch (error: unknown) {\n if (!isTransientClaimError(error)) {\n throw error;\n }\n\n if (Date.now() >= deadline) {\n return { items: [], inflightRuns: [], timedOut: true };\n }\n\n consecutiveFailures += 1;\n const backoffMs = computeBackoffMs(consecutiveFailures, retryBaseMs, retryMaxMs);\n const remainingMs = deadline - Date.now();\n await sleepFn(Math.min(backoffMs, remainingMs));\n continue;\n }\n\n if (response.items.length > 0) {\n return { items: response.items, inflightRuns: [], timedOut: false };\n }\n\n const inflightRuns = await fetchInflightAgentRuns(client, { projectId, limit: claimLimit });\n if (inflightRuns.length > 0) {\n return { items: [], inflightRuns, timedOut: false };\n }\n\n if (Date.now() >= deadline) {\n return { items: [], inflightRuns: [], timedOut: true };\n }\n\n const remainingMs = deadline - Date.now();\n const waitMs = Math.min(pollIntervalMs, remainingMs);\n await sleepFn(waitMs);\n }\n}\n", "import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport type {\n OrchestratorActiveRunState,\n OrchestratorAttentionPendingState,\n WriteActiveRunStateInput\n} from \"./active-run-state.types.js\";\n\nexport const ACTIVE_RUN_STATE_RELATIVE_PATH = \".cursor/orchestrator-active-run.json\";\nexport const ATTENTION_PENDING_RELATIVE_PATH = \".cursor/orchestrator-attention-pending.json\";\nexport const ACTIVE_RUN_LEASE_MINUTES = 30;\n\nconst UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isUuid(value: string): boolean {\n return UUID_PATTERN.test(value);\n}\n\nfunction isIsoDateTimeString(value: string): boolean {\n return !Number.isNaN(Date.parse(value));\n}\n\nexport function getActiveRunStatePath(workspaceRoot: string): string {\n return join(workspaceRoot, ACTIVE_RUN_STATE_RELATIVE_PATH);\n}\n\nexport function getAttentionPendingPath(workspaceRoot: string): string {\n return join(workspaceRoot, ATTENTION_PENDING_RELATIVE_PATH);\n}\n\nexport function computeExpiresAt(acknowledgedAt: string, leaseMinutes: number = ACTIVE_RUN_LEASE_MINUTES): string {\n const expiresMs = Date.parse(acknowledgedAt) + leaseMinutes * 60 * 1000;\n return new Date(expiresMs).toISOString();\n}\n\nfunction ensureCursorDir(workspaceRoot: string): void {\n const cursorDir = join(workspaceRoot, \".cursor\");\n if (!existsSync(cursorDir)) {\n mkdirSync(cursorDir, { recursive: true });\n }\n}\n\nfunction parseActiveRunState(raw: unknown): OrchestratorActiveRunState | null {\n if (!isRecord(raw)) {\n return null;\n }\n\n const version = raw.version;\n const agentRunId = raw.agentRunId;\n const workItemId = raw.workItemId;\n const projectId = raw.projectId;\n const acknowledgedAt = raw.acknowledgedAt;\n const expiresAt = raw.expiresAt;\n\n if (\n version !== 1 ||\n typeof agentRunId !== \"string\" ||\n typeof workItemId !== \"string\" ||\n typeof projectId !== \"string\" ||\n typeof acknowledgedAt !== \"string\" ||\n typeof expiresAt !== \"string\" ||\n !isUuid(agentRunId) ||\n !isUuid(workItemId) ||\n !isUuid(projectId) ||\n !isIsoDateTimeString(acknowledgedAt) ||\n !isIsoDateTimeString(expiresAt)\n ) {\n return null;\n }\n\n return {\n version: 1,\n agentRunId,\n workItemId,\n projectId,\n acknowledgedAt,\n expiresAt\n };\n}\n\nfunction parseAttentionPendingState(raw: unknown): OrchestratorAttentionPendingState | null {\n if (!isRecord(raw)) {\n return null;\n }\n\n const agentRunId = raw.agentRunId;\n const reportedAt = raw.reportedAt;\n\n if (\n typeof agentRunId !== \"string\" ||\n typeof reportedAt !== \"string\" ||\n !isUuid(agentRunId) ||\n !isIsoDateTimeString(reportedAt)\n ) {\n return null;\n }\n\n return { agentRunId, reportedAt };\n}\n\nexport function isActiveRunStateUsable(\n state: OrchestratorActiveRunState | null,\n nowMs: number = Date.now()\n): state is OrchestratorActiveRunState {\n if (state === null) {\n return false;\n }\n\n const expiresMs = Date.parse(state.expiresAt);\n if (Number.isNaN(expiresMs)) {\n return false;\n }\n\n return nowMs < expiresMs;\n}\n\nexport function readActiveRunState(workspaceRoot: string): OrchestratorActiveRunState | null {\n const filePath = getActiveRunStatePath(workspaceRoot);\n if (!existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = readFileSync(filePath, \"utf8\");\n const parsed: unknown = JSON.parse(content);\n return parseActiveRunState(parsed);\n } catch {\n return null;\n }\n}\n\nexport function writeActiveRunState(\n workspaceRoot: string,\n input: WriteActiveRunStateInput\n): OrchestratorActiveRunState {\n ensureCursorDir(workspaceRoot);\n\n const state: OrchestratorActiveRunState = {\n version: 1,\n agentRunId: input.agentRunId,\n workItemId: input.workItemId,\n projectId: input.projectId,\n acknowledgedAt: input.acknowledgedAt,\n expiresAt: computeExpiresAt(input.acknowledgedAt)\n };\n\n writeFileSync(getActiveRunStatePath(workspaceRoot), `${JSON.stringify(state, null, 2)}\\n`, \"utf8\");\n return state;\n}\n\nexport function clearActiveRunState(workspaceRoot: string): void {\n const filePath = getActiveRunStatePath(workspaceRoot);\n if (existsSync(filePath)) {\n rmSync(filePath, { force: true });\n }\n}\n\nexport function readAttentionPendingState(workspaceRoot: string): OrchestratorAttentionPendingState | null {\n const filePath = getAttentionPendingPath(workspaceRoot);\n if (!existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = readFileSync(filePath, \"utf8\");\n const parsed: unknown = JSON.parse(content);\n return parseAttentionPendingState(parsed);\n } catch {\n return null;\n }\n}\n\nexport function writeAttentionPendingState(\n workspaceRoot: string,\n agentRunId: string\n): OrchestratorAttentionPendingState {\n ensureCursorDir(workspaceRoot);\n\n const pending: OrchestratorAttentionPendingState = {\n agentRunId,\n reportedAt: new Date().toISOString()\n };\n\n writeFileSync(getAttentionPendingPath(workspaceRoot), `${JSON.stringify(pending, null, 2)}\\n`, \"utf8\");\n return pending;\n}\n\nexport function clearAttentionPendingState(workspaceRoot: string): void {\n const filePath = getAttentionPendingPath(workspaceRoot);\n if (existsSync(filePath)) {\n rmSync(filePath, { force: true });\n }\n}\n\nexport function clearOrchestratorBridgeState(workspaceRoot: string): void {\n clearActiveRunState(workspaceRoot);\n clearAttentionPendingState(workspaceRoot);\n}\n", "import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst TASK_BOARDS_FILE = \".task-boards.yaml\";\nconst VERSION_PATTERN = /^\\s*version\\s*:\\s*1\\s*$/m;\nconst PROJECT_ID_PATTERN =\n /^\\s*projectId\\s*:\\s*[\"']?([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})[\"']?\\s*$/im;\n\nexport function parseTaskBoardsYaml(workspaceRoot: string): string | null {\n const filePath = join(workspaceRoot, TASK_BOARDS_FILE);\n if (!existsSync(filePath)) {\n return null;\n }\n\n const content = readFileSync(filePath, \"utf8\");\n if (!VERSION_PATTERN.test(content)) {\n return null;\n }\n\n const match = PROJECT_ID_PATTERN.exec(content);\n if (match === null) {\n return null;\n }\n\n return match[1] ?? null;\n}\n", "import type { AgentRunResponse } from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\n\nexport const ATTENTION_MESSAGE_CATEGORY = {\n SHELL: \"shell\",\n GIT: \"git\",\n NETWORK: \"network\",\n SMART_MODE: \"smart-mode\",\n MCP: \"mcp\",\n FILE: \"file\",\n OTHER: \"other\"\n} as const;\n\nexport type AttentionMessageCategory = (typeof ATTENTION_MESSAGE_CATEGORY)[keyof typeof ATTENTION_MESSAGE_CATEGORY];\n\nexport type OrchestratorRunPhase = \"dispatched\" | \"acknowledged\" | \"awaiting_ide_approval\" | \"ready_to_complete\";\n\nexport interface AttentionMessageTemplate {\n category: AttentionMessageCategory;\n label: string;\n /** Human-readable pattern; `{detail}` placeholder */\n messagePattern: string;\n example: string;\n}\n\nexport interface AttentionGuidance {\n phase: OrchestratorRunPhase;\n reportStep: string | null;\n clearStep: string | null;\n detectedCategory: AttentionMessageCategory | null;\n templateExamples: AttentionMessageCategory[];\n}\n\nconst ATTENTION_MESSAGE_PREFIX_PATTERN = /^\\[([^\\]]+)\\]\\s*/;\n\nexport const ATTENTION_MESSAGE_TEMPLATES: Record<AttentionMessageCategory, AttentionMessageTemplate> = {\n [ATTENTION_MESSAGE_CATEGORY.SHELL]: {\n category: ATTENTION_MESSAGE_CATEGORY.SHELL,\n label: \"Shell command approval\",\n messagePattern: \"[shell] Approve shell command: {detail}\",\n example: \"[shell] Approve npm install --force in repo root\"\n },\n [ATTENTION_MESSAGE_CATEGORY.GIT]: {\n category: ATTENTION_MESSAGE_CATEGORY.GIT,\n label: \"Git operation approval\",\n messagePattern: \"[git] Approve git operation: {detail}\",\n example: \"[git] Approve git push origin feature/tb-107\"\n },\n [ATTENTION_MESSAGE_CATEGORY.NETWORK]: {\n category: ATTENTION_MESSAGE_CATEGORY.NETWORK,\n label: \"Network access approval\",\n messagePattern: \"[network] Approve network access: {detail}\",\n example: \"[network] Approve fetch to registry.npmjs.org\"\n },\n [ATTENTION_MESSAGE_CATEGORY.SMART_MODE]: {\n category: ATTENTION_MESSAGE_CATEGORY.SMART_MODE,\n label: \"Smart Mode approval\",\n messagePattern: \"[smart-mode] Approve Smart Mode: {detail}\",\n example: \"[smart-mode] Approve blocked npm ci with elevated permissions\"\n },\n [ATTENTION_MESSAGE_CATEGORY.MCP]: {\n category: ATTENTION_MESSAGE_CATEGORY.MCP,\n label: \"MCP / API action approval\",\n messagePattern: \"[mcp] Approve MCP / API action: {detail}\",\n example: \"[mcp] Approve TASK_BOARDS_API_TOKEN rotation test call\"\n },\n [ATTENTION_MESSAGE_CATEGORY.FILE]: {\n category: ATTENTION_MESSAGE_CATEGORY.FILE,\n label: \"Out-of-scope file change approval\",\n messagePattern: \"[file] Approve file change outside scope: {detail}\",\n example: \"[file] Approve edit to packages/backend/config.yaml\"\n },\n [ATTENTION_MESSAGE_CATEGORY.OTHER]: {\n category: ATTENTION_MESSAGE_CATEGORY.OTHER,\n label: \"Other human input\",\n messagePattern: \"[other] Human input required: {detail}\",\n example: \"[other] Provide staging DB credentials\"\n }\n};\n\nconst ALL_TEMPLATE_CATEGORIES: AttentionMessageCategory[] = Object.values(ATTENTION_MESSAGE_CATEGORY);\n\nfunction isAttentionMessageCategory(value: string): value is AttentionMessageCategory {\n return ALL_TEMPLATE_CATEGORIES.includes(value as AttentionMessageCategory);\n}\n\nexport function deriveOrchestratorRunPhase(run: AgentRunResponse): OrchestratorRunPhase {\n if (run.requiresAttention) {\n return \"awaiting_ide_approval\";\n }\n\n if (run.status === AGENT_RUN_STATUS.DISPATCHED) {\n return \"dispatched\";\n }\n\n if (run.status === AGENT_RUN_STATUS.ACKNOWLEDGED) {\n return \"acknowledged\";\n }\n\n if (run.acknowledgedAt !== null) {\n return \"ready_to_complete\";\n }\n\n return \"dispatched\";\n}\n\nexport function parseAttentionMessageCategory(message: string): AttentionMessageCategory {\n const match = ATTENTION_MESSAGE_PREFIX_PATTERN.exec(message);\n\n if (match === null) {\n return ATTENTION_MESSAGE_CATEGORY.OTHER;\n }\n\n const rawCategory = match[1].toLowerCase();\n\n if (isAttentionMessageCategory(rawCategory)) {\n return rawCategory;\n }\n\n return ATTENTION_MESSAGE_CATEGORY.OTHER;\n}\n\nexport function formatAttentionMessage(category: AttentionMessageCategory, detail: string): string {\n return `[${category}] ${detail.trim()}`;\n}\n\nexport function buildAttentionGuidance(run: AgentRunResponse): AttentionGuidance {\n const phase = deriveOrchestratorRunPhase(run);\n const detectedCategory = run.attentionMessage !== null ? parseAttentionMessageCategory(run.attentionMessage) : null;\n\n const reportStep =\n phase === \"awaiting_ide_approval\"\n ? null\n : `report_agent_attention(${run.id}, message) \u2014 use formatAttentionMessage(category, detail); replaces prior message on same ACK run`;\n\n const clearStep = run.requiresAttention\n ? `clear_agent_attention(${run.id}) after resolving: ${run.attentionMessage ?? \"attention flag\"}`\n : null;\n\n return {\n phase,\n reportStep,\n clearStep,\n detectedCategory,\n templateExamples: ALL_TEMPLATE_CATEGORIES\n };\n}\n", "export type ShellAttentionCategory = \"shell\" | \"git\" | \"network\";\n\nconst READONLY_SHELL_PATTERN =\n /^\\s*(?:ls(?:\\s|$)|cat\\s|pwd(?:\\s|$)|echo\\s|git\\s+status(?:\\s|$)|git\\s+diff(?:\\s|$)|git\\s+log(?:\\s|$))/i;\n\nconst GIT_DESTRUCTIVE_PATTERN =\n /\\bgit\\b.*\\b(?:push|commit|checkout|reset|rebase|merge|tag|stash\\s+pop|clean|fetch|pull|clone|remote|submodule)\\b|\\b(?:push|commit|checkout|reset|rebase|merge|tag|stash\\s+pop|clean|fetch|pull|clone|remote|submodule)\\b.*\\bgit\\b/i;\n\nconst NETWORK_PATTERN =\n /\\b(?:curl|wget|npm\\s+(?:install|ci|publish|login)|pnpm\\s+(?:install|add|i)|yarn\\s+(?:install|add)|pip3?\\s+install|docker\\s+(?:pull|push|run|build|compose)|gh\\s+api|npx\\s+-y|nc\\s|telnet\\s|ssh\\s)\\b/i;\n\nexport function truncateCommand(command: string, maxLength: number): string {\n const trimmed = command.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n\n return `${trimmed.slice(0, maxLength - 1)}\u2026`;\n}\n\nexport function classifyShellCommand(command: string): ShellAttentionCategory | null {\n const trimmed = command.trim();\n if (trimmed === \"\") {\n return null;\n }\n\n if (READONLY_SHELL_PATTERN.test(trimmed)) {\n return null;\n }\n\n if (GIT_DESTRUCTIVE_PATTERN.test(trimmed)) {\n return \"git\";\n }\n\n if (NETWORK_PATTERN.test(trimmed)) {\n return \"network\";\n }\n\n return \"shell\";\n}\n", "import {\n ATTENTION_MESSAGE_CATEGORY,\n formatAttentionMessage,\n type AttentionMessageCategory\n} from \"../tools/orchestrator-attention.util.js\";\n\nimport { truncateCommand, type ShellAttentionCategory } from \"./shell-category.util.js\";\n\nexport function buildShellAttentionMessage(category: ShellAttentionCategory, command: string): string {\n const truncated = truncateCommand(command, 200);\n\n switch (category) {\n case \"git\":\n return formatAttentionMessage(ATTENTION_MESSAGE_CATEGORY.GIT, `Approve git operation: ${truncated}`);\n case \"network\":\n return formatAttentionMessage(ATTENTION_MESSAGE_CATEGORY.NETWORK, `Approve network access: ${truncated}`);\n case \"shell\":\n return formatAttentionMessage(ATTENTION_MESSAGE_CATEGORY.SHELL, `Approve shell command: ${truncated}`);\n }\n}\n\nexport function buildMcpAttentionMessage(server: string, toolName: string): string {\n const detail = `${server}/${toolName}`.trim();\n return formatAttentionMessage(ATTENTION_MESSAGE_CATEGORY.MCP, `Approve MCP / API action: ${detail}`);\n}\n\nexport function buildSmartModeAttentionMessage(toolName: string, reason?: string | null): string {\n const detailReason =\n reason !== undefined && reason !== null && reason.trim() !== \"\" ? reason.trim() : \"elevated permissions required\";\n return formatAttentionMessage(\n ATTENTION_MESSAGE_CATEGORY.SMART_MODE,\n `Approve Smart Mode: ${toolName} \u2014 ${detailReason}`\n );\n}\n\nexport function buildCategoryAttentionMessage(category: AttentionMessageCategory, detail: string): string {\n return formatAttentionMessage(category, detail);\n}\n", "export type HookAttentionEvent =\n | \"beforeShellExecution\"\n | \"beforeMCPExecution\"\n | \"preToolUse\"\n | \"afterShellExecution\"\n | \"afterMCPExecution\"\n | \"postToolUse\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(record: Record<string, unknown>, key: string): string | null {\n const value = record[key];\n if (typeof value !== \"string\" || value.trim() === \"\") {\n return null;\n }\n\n return value;\n}\n\nexport function parseHookPayloadJson(raw: string): Record<string, unknown> | null {\n const trimmed = raw.trim();\n if (trimmed === \"\") {\n return null;\n }\n\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (!isRecord(parsed)) {\n return null;\n }\n\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport function extractShellCommand(payload: Record<string, unknown>): string | null {\n return readString(payload, \"command\");\n}\n\nexport function extractMcpExecution(payload: Record<string, unknown>): { server: string; toolName: string } | null {\n const server = readString(payload, \"server\") ?? readString(payload, \"serverName\") ?? readString(payload, \"mcpServer\");\n const toolName = readString(payload, \"toolName\") ?? readString(payload, \"tool\") ?? readString(payload, \"mcpToolName\");\n\n if (server === null || toolName === null) {\n return null;\n }\n\n return { server, toolName };\n}\n\nexport function extractPreToolUse(payload: Record<string, unknown>): {\n toolName: string;\n smartModeReason: string | null;\n} | null {\n const toolName =\n readString(payload, \"tool_name\") ??\n readString(payload, \"toolName\") ??\n readString(payload, \"tool\") ??\n readString(payload, \"name\");\n\n if (toolName === null) {\n return null;\n }\n\n const smartModeReason =\n readString(payload, \"block_reason\") ??\n readString(payload, \"smartModeBlockReason\") ??\n readString(payload, \"smart_mode_block_reason\") ??\n readString(payload, \"reason\");\n\n const permission = readString(payload, \"permission\");\n const smartMode = payload.smart_mode ?? payload.smartMode;\n\n const hasSmartModeSignal =\n smartModeReason !== null || permission === \"ask\" || smartMode === true || smartMode === \"blocked\";\n\n if (!hasSmartModeSignal) {\n return null;\n }\n\n return { toolName, smartModeReason };\n}\n\nexport function isAfterHookEvent(event: HookAttentionEvent): boolean {\n return event === \"afterShellExecution\" || event === \"afterMCPExecution\" || event === \"postToolUse\";\n}\n", "import type { AgentRunResponse } from \"@task-boards/api/agent-runs/agent-runs.types\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport { createOrchestratorTransport } from \"../orchestrator/orchestrator-transport.js\";\nimport {\n clearActiveRunState,\n clearAttentionPendingState,\n clearOrchestratorBridgeState,\n isActiveRunStateUsable,\n readActiveRunState,\n readAttentionPendingState,\n writeActiveRunState,\n writeAttentionPendingState\n} from \"../orchestrator/active-run-state.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { parseTaskBoardsYaml } from \"../workspace/parse-task-boards-yaml.js\";\nimport { resolveWorkspaceRoot } from \"../workspace/resolve-workspace-root.js\";\n\nimport {\n buildMcpAttentionMessage,\n buildShellAttentionMessage,\n buildSmartModeAttentionMessage\n} from \"./attention-message.util.js\";\nimport {\n extractMcpExecution,\n extractPreToolUse,\n extractShellCommand,\n isAfterHookEvent,\n parseHookPayloadJson,\n type HookAttentionEvent\n} from \"./hook-payload.util.js\";\nimport { classifyShellCommand } from \"./shell-category.util.js\";\n\nexport interface AttentionCliDeps {\n config: McpServerConfig;\n client: RestClient;\n readStdin?: () => Promise<string>;\n logError?: (message: string) => void;\n}\n\nfunction defaultReadStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", chunk => {\n chunks.push(Buffer.from(chunk));\n });\n process.stdin.on(\"end\", () => {\n resolve(Buffer.concat(chunks).toString(\"utf8\"));\n });\n process.stdin.on(\"error\", reject);\n });\n}\n\nfunction resolveBridgeWorkspaceRoot(config: McpServerConfig): string | null {\n try {\n return resolveWorkspaceRoot(undefined, config.workspaceRoot);\n } catch {\n return null;\n }\n}\n\nfunction resolveProjectId(workspaceRoot: string): string | null {\n return parseTaskBoardsYaml(workspaceRoot);\n}\n\nexport function writeActiveRunFromAck(config: McpServerConfig, run: AgentRunResponse): void {\n if (config.workspaceRoot === undefined) {\n return;\n }\n\n const workspaceRoot = resolveBridgeWorkspaceRoot(config);\n if (workspaceRoot === null) {\n return;\n }\n\n const projectId = resolveProjectId(workspaceRoot);\n if (projectId === null) {\n return;\n }\n\n const acknowledgedAt = run.acknowledgedAt ?? new Date().toISOString();\n writeActiveRunState(workspaceRoot, {\n agentRunId: run.id,\n workItemId: run.workItemId,\n projectId,\n acknowledgedAt\n });\n}\n\nexport function clearActiveRunAfterComplete(config: McpServerConfig): void {\n if (config.workspaceRoot === undefined) {\n return;\n }\n\n const workspaceRoot = resolveBridgeWorkspaceRoot(config);\n if (workspaceRoot === null) {\n return;\n }\n\n clearActiveRunState(workspaceRoot);\n clearAttentionPendingState(workspaceRoot);\n}\n\nfunction logCliError(deps: AttentionCliDeps, message: string): void {\n if (deps.logError !== undefined) {\n deps.logError(message);\n return;\n }\n\n console.error(message);\n}\n\nfunction readFlagValue(args: string[], flag: string): string | null {\n const index = args.indexOf(flag);\n if (index === -1 || index + 1 >= args.length) {\n return null;\n }\n\n return args[index + 1] ?? null;\n}\n\nfunction removeConsumedFlags(args: string[]): string[] {\n const flagsWithValues = new Set([\n \"--category\",\n \"--detail\",\n \"--event\",\n \"--agent-run-id\",\n \"--work-item-id\",\n \"--project-id\",\n \"--acknowledged-at\"\n ]);\n const result: string[] = [];\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (flagsWithValues.has(arg)) {\n index += 1;\n continue;\n }\n\n result.push(arg);\n }\n\n return result;\n}\n\nasync function reportAttention(\n deps: AttentionCliDeps,\n agentRunId: string,\n message: string,\n workspaceRoot: string\n): Promise<void> {\n const transport = createOrchestratorTransport(deps.client);\n await transport.setAttention(agentRunId, true, message);\n writeAttentionPendingState(workspaceRoot, agentRunId);\n}\n\nasync function clearAttention(deps: AttentionCliDeps, workspaceRoot: string): Promise<void> {\n const pending = readAttentionPendingState(workspaceRoot);\n if (pending === null) {\n return;\n }\n\n const active = readActiveRunState(workspaceRoot);\n if (!isActiveRunStateUsable(active) || active.agentRunId !== pending.agentRunId) {\n return;\n }\n\n const transport = createOrchestratorTransport(deps.client);\n try {\n await transport.setAttention(active.agentRunId, false);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : \"Failed to clear agent attention\";\n logCliError(deps, message);\n } finally {\n clearAttentionPendingState(workspaceRoot);\n }\n}\n\nasync function handleAttentionReport(deps: AttentionCliDeps, args: string[]): Promise<number> {\n const category = readFlagValue(args, \"--category\");\n const detail = readFlagValue(args, \"--detail\");\n\n if (category === null || detail === null) {\n logCliError(deps, \"attention report requires --category and --detail\");\n return 0;\n }\n\n const workspaceRoot = resolveBridgeWorkspaceRoot(deps.config);\n if (workspaceRoot === null) {\n return 0;\n }\n\n const active = readActiveRunState(workspaceRoot);\n if (!isActiveRunStateUsable(active)) {\n return 0;\n }\n\n const message = `[${category}] ${detail.trim()}`;\n\n try {\n await reportAttention(deps, active.agentRunId, message, workspaceRoot);\n } catch (error: unknown) {\n const messageText = error instanceof Error ? error.message : \"Failed to report agent attention\";\n logCliError(deps, messageText);\n }\n\n return 0;\n}\n\nasync function handleAttentionReportFromHook(deps: AttentionCliDeps, args: string[]): Promise<number> {\n const eventRaw = readFlagValue(args, \"--event\");\n if (eventRaw === null) {\n logCliError(deps, \"attention report-from-hook requires --event\");\n return 0;\n }\n\n const event = eventRaw as HookAttentionEvent;\n if (isAfterHookEvent(event)) {\n return 0;\n }\n\n const readStdin = deps.readStdin ?? defaultReadStdin;\n const stdin = await readStdin();\n const payload = parseHookPayloadJson(stdin);\n if (payload === null) {\n return 0;\n }\n\n const workspaceRoot = resolveBridgeWorkspaceRoot(deps.config);\n if (workspaceRoot === null) {\n return 0;\n }\n\n const active = readActiveRunState(workspaceRoot);\n if (!isActiveRunStateUsable(active)) {\n return 0;\n }\n\n let message: string | null = null;\n\n if (event === \"beforeShellExecution\") {\n const command = extractShellCommand(payload);\n if (command === null) {\n return 0;\n }\n\n const category = classifyShellCommand(command);\n if (category === null) {\n return 0;\n }\n\n message = buildShellAttentionMessage(category, command);\n } else if (event === \"beforeMCPExecution\") {\n const mcp = extractMcpExecution(payload);\n if (mcp === null) {\n return 0;\n }\n\n message = buildMcpAttentionMessage(mcp.server, mcp.toolName);\n } else if (event === \"preToolUse\") {\n const preTool = extractPreToolUse(payload);\n if (preTool === null) {\n return 0;\n }\n\n message = buildSmartModeAttentionMessage(preTool.toolName, preTool.smartModeReason);\n }\n\n if (message === null) {\n return 0;\n }\n\n try {\n await reportAttention(deps, active.agentRunId, message, workspaceRoot);\n } catch (error: unknown) {\n const messageText = error instanceof Error ? error.message : \"Failed to report agent attention from hook\";\n logCliError(deps, messageText);\n }\n\n return 0;\n}\n\nasync function handleAttentionClear(deps: AttentionCliDeps): Promise<number> {\n const workspaceRoot = resolveBridgeWorkspaceRoot(deps.config);\n if (workspaceRoot === null) {\n return 0;\n }\n\n await clearAttention(deps, workspaceRoot);\n return 0;\n}\n\nfunction handleOrchestratorWriteActiveRun(deps: AttentionCliDeps, args: string[]): number {\n const agentRunId = readFlagValue(args, \"--agent-run-id\");\n const workItemId = readFlagValue(args, \"--work-item-id\");\n const projectId = readFlagValue(args, \"--project-id\");\n const acknowledgedAt = readFlagValue(args, \"--acknowledged-at\") ?? new Date().toISOString();\n\n if (agentRunId === null || workItemId === null || projectId === null) {\n logCliError(deps, \"orchestrator write-active-run requires --agent-run-id, --work-item-id, --project-id\");\n return 0;\n }\n\n const workspaceRoot = resolveBridgeWorkspaceRoot(deps.config);\n if (workspaceRoot === null) {\n return 0;\n }\n\n writeActiveRunState(workspaceRoot, {\n agentRunId,\n workItemId,\n projectId,\n acknowledgedAt\n });\n\n return 0;\n}\n\nfunction handleOrchestratorClearActiveRun(deps: AttentionCliDeps): number {\n const workspaceRoot = resolveBridgeWorkspaceRoot(deps.config);\n if (workspaceRoot === null) {\n return 0;\n }\n\n clearOrchestratorBridgeState(workspaceRoot);\n return 0;\n}\n\nexport async function runAttentionCli(argv: string[], deps: AttentionCliDeps): Promise<number> {\n const args = removeConsumedFlags(argv);\n const topLevel = args[0];\n\n if (topLevel === \"attention\") {\n const subcommand = args[1];\n\n if (subcommand === \"report\") {\n return handleAttentionReport(deps, argv);\n }\n\n if (subcommand === \"report-from-hook\") {\n return handleAttentionReportFromHook(deps, argv);\n }\n\n if (subcommand === \"clear\") {\n return handleAttentionClear(deps);\n }\n\n logCliError(deps, `Unknown attention subcommand: ${subcommand ?? \"(missing)\"}`);\n return 0;\n }\n\n if (topLevel === \"orchestrator\") {\n const subcommand = args[1];\n\n if (subcommand === \"write-active-run\") {\n return handleOrchestratorWriteActiveRun(deps, argv);\n }\n\n if (subcommand === \"clear-active-run\") {\n return handleOrchestratorClearActiveRun(deps);\n }\n\n logCliError(deps, `Unknown orchestrator subcommand: ${subcommand ?? \"(missing)\"}`);\n return 0;\n }\n\n return 1;\n}\n\nexport function isAttentionCliInvocation(argv: string[]): boolean {\n const topLevel = argv[0];\n return topLevel === \"attention\" || topLevel === \"orchestrator\";\n}\n", "import { API_V1_PREFIX } from \"@task-boards/api\";\n\nfunction resolveSanitizeResponses(): boolean {\n const raw = process.env.TASK_BOARDS_MCP_SANITIZE;\n if (raw === undefined || raw.trim() === \"\") {\n return true;\n }\n\n const normalized = raw.trim().toLowerCase();\n return normalized !== \"false\" && normalized !== \"0\" && normalized !== \"no\";\n}\n\nfunction resolveBlockSensitiveAttachments(): boolean {\n const raw = process.env.TASK_BOARDS_MCP_BLOCK_SENSITIVE_ATTACHMENTS;\n if (raw === undefined || raw.trim() === \"\") {\n return true;\n }\n\n const normalized = raw.trim().toLowerCase();\n return normalized !== \"false\" && normalized !== \"0\" && normalized !== \"no\";\n}\n\nexport interface McpServerConfig {\n apiUrl: string;\n apiToken: string | undefined;\n workspaceRoot: string | undefined;\n sanitizeResponses: boolean;\n blockSensitiveAttachments: boolean;\n}\n\nexport function loadConfig(): McpServerConfig {\n const apiUrl = process.env.TASK_BOARDS_API_URL ?? \"http://localhost:3000\";\n const apiToken = process.env.TASK_BOARDS_API_TOKEN;\n const workspaceRoot = process.env.WORKSPACE_ROOT;\n\n if (process.env.NODE_ENV === \"production\" && (apiToken === undefined || apiToken.trim() === \"\")) {\n console.error(\"WARNING: TASK_BOARDS_API_TOKEN is not set. MCP server cannot authenticate to the Task Boards API.\");\n }\n\n return {\n apiUrl: `${apiUrl.replace(/\\/$/, \"\")}${API_V1_PREFIX}`,\n apiToken,\n workspaceRoot: workspaceRoot !== undefined && workspaceRoot.trim() !== \"\" ? workspaceRoot : undefined,\n sanitizeResponses: resolveSanitizeResponses(),\n blockSensitiveAttachments: resolveBlockSensitiveAttachments()\n };\n}\n", "import { createRequire } from \"node:module\";\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { loadConfig } from \"./config.js\";\nimport { RestClient } from \"./rest-client.js\";\nimport { initToolRuntime } from \"./tool-runtime.js\";\nimport { registerTools } from \"./tools/index.js\";\n\nconst require = createRequire(import.meta.url);\nconst { version: packageVersion } = require(\"../package.json\") as { version: string };\n\nexport async function main(): Promise<void> {\n const config = loadConfig();\n initToolRuntime(config);\n const client = new RestClient(config.apiUrl, config.apiToken);\n\n const server = new McpServer({\n name: \"task-boards\",\n version: packageVersion\n });\n\n registerTools(server, client, config);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { AGENT_RUNS_ROUTES } from \"@task-boards/api/agent-runs/agent-runs.api\";\nimport type {\n AgentRunListResponse,\n AgentRunResponse,\n CompleteAgentRunRequest,\n CompleteAgentRunResponse,\n SetAgentRunAttentionRequest\n} from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_OUTCOME } from \"@task-boards/api/enums/agent-run-outcome.enum\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { clearActiveRunAfterComplete, writeActiveRunFromAck } from \"../attention/attention-cli.js\";\n\nimport { enrichPollResult } from \"./orchestrator-hints.js\";\nimport { runTool } from \"./tool-utils.js\";\nimport { pollAgentRuns } from \"./wait-for-agent-runs.js\";\n\nconst agentRunStatusValues = Object.values(AGENT_RUN_STATUS) as [string, ...string[]];\nconst agentRunOutcomeValues = Object.values(AGENT_RUN_OUTCOME) as [string, ...string[]];\n\nconst AGENTIC_SDLC_COLUMNS_SUMMARY =\n \"AGENTIC_SDLC has 7 columns: backlog, in-analysis (PRODUCT\u2192ANALYST\u2192ARCHITECT handoffs), in-development (DESIGNER optional, then parallel FRONTEND_DEVELOPER+DEVELOPER), in-qa, in-awaiting, done, released.\";\n\nconst COMPLETE_AGENT_RUN_OUTCOME_SUMMARY =\n \"Prerequisite: STORY assignee must be \u0410\u0433\u0435\u043D\u0442 \u0418\u0418 (SERVICE user) \u2014 otherwise no agent_run is enqueued or claimed. in-analysis: PRODUCT/ANALYST DEFAULT \u2192 HANDOFF next phase (skip unbound roles); ANALYST SKIP_DESIGN \u2192 in-development; ANALYST SKIP_DEV \u2192 released when codeChangesRequired=false (no git commit); ARCHITECT DEFAULT \u2192 in-development (set workItemPatch.designerRequired). in-development: DESIGNER DEFAULT \u2192 DEVELOPMENT; dev role DEFAULT removes role from pendingDevRoles, moves to in-qa when empty; SKIP_DESIGN skips DESIGNER. in-qa: DEFAULT \u2192 done; HAS_BUGS \u2192 in-development (re-init pendingDevRoles). NEEDS_CLARIFICATION \u2192 in-awaiting. FAILED \u2192 no move. Claim priority: in-development > in-qa > in-analysis (SERVICE-assigned stories only block analysis).\";\n\nexport function registerAgentRunTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"list_agent_runs\",\n {\n description:\n \"List agent runs for a project (default status PENDING). Prefer wait_for_agent_runs for orchestrator long-polling.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID (required)\"),\n status: z.enum(agentRunStatusValues).optional().describe(\"Filter by agent run status\")\n }\n },\n async ({ status, projectId }) =>\n runTool(async () => {\n const effectiveStatus = status ?? AGENT_RUN_STATUS.PENDING;\n return client.get<AgentRunListResponse>(AGENT_RUNS_ROUTES.listAgentRuns(), {\n status: effectiveStatus,\n projectId\n });\n })\n );\n\n server.registerTool(\n \"wait_for_agent_runs\",\n {\n description:\n \"Long-poll agent runs for a project: atomically claims PENDING runs (POST /agent-runs/claim). On empty claim, immediately lists inflight DISPATCHED/ACKNOWLEDGED runs (GET activeOnly) for orphan recovery before sleeping. Returns items (newly claimed), inflightRuns (resume candidates), and orchestrator hints. First claim is immediate; subsequent polls sleep pollInterval seconds only when both claim and inflight are empty.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n timeout: z.number().int().min(1).max(300).default(120).describe(\"Maximum wait in seconds (1\u2013300, default 120)\"),\n pollInterval: z\n .number()\n .int()\n .min(1)\n .max(60)\n .default(2)\n .describe(\"Seconds between polls (1\u201360, default 2); must not exceed timeout\"),\n limit: z.number().int().min(1).max(10).default(1).describe(\"Max runs to claim per poll (1\u201310, default 1)\")\n }\n },\n async ({ projectId, timeout, pollInterval, limit }) =>\n runTool(async () => {\n const pollResult = await pollAgentRuns(client, {\n projectId,\n timeoutMs: timeout * 1000,\n pollIntervalMs: pollInterval * 1000,\n limit\n });\n return enrichPollResult(pollResult.items, pollResult.inflightRuns, pollResult.timedOut);\n })\n );\n\n server.registerTool(\n \"ack_agent_run\",\n {\n description:\n \"Acknowledge agent run delivery after Task subagent has been dispatched. Requires status DISPATCHED (DISPATCHED \u2192 ACKNOWLEDGED).\",\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\"),\n note: z.string().nullable().optional().describe(\"Optional acknowledgment note\")\n }\n },\n async ({ agentRunId, note }) =>\n runTool(async () => {\n const body = note !== undefined ? { note } : undefined;\n const response = await client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.acknowledgeAgentRun(agentRunId), body);\n writeActiveRunFromAck(config, response);\n return response;\n })\n );\n\n server.registerTool(\n \"report_agent_attention\",\n {\n description:\n \"Signal that the in-flight subagent needs human attention while the run is ACKNOWLEDGED. Sets requiresAttention on the agent run for orchestrator/UI visibility.\",\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\"),\n message: z.string().min(1).describe(\"Why human attention is needed\")\n }\n },\n async ({ agentRunId, message }) =>\n runTool(async () => {\n const body: SetAgentRunAttentionRequest = {\n requiresAttention: true,\n attentionMessage: message\n };\n return client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.setAgentRunAttention(agentRunId), body);\n })\n );\n\n server.registerTool(\n \"clear_agent_attention\",\n {\n description:\n \"Clear the human-attention flag after the blocker is resolved. Requires the run to still be ACKNOWLEDGED.\",\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\")\n }\n },\n async ({ agentRunId }) =>\n runTool(async () => {\n const body: SetAgentRunAttentionRequest = {\n requiresAttention: false\n };\n return client.patch<AgentRunResponse>(AGENT_RUNS_ROUTES.setAgentRunAttention(agentRunId), body);\n })\n );\n\n server.registerTool(\n \"complete_agent_run\",\n {\n description: `Complete agent run: apply AGENTIC_SDLC workflow transition and optional work item patch. ${AGENTIC_SDLC_COLUMNS_SUMMARY} Outcomes: ${COMPLETE_AGENT_RUN_OUTCOME_SUMMARY}`,\n inputSchema: {\n agentRunId: z.string().uuid().describe(\"Agent run UUID\"),\n outcome: z\n .enum(agentRunOutcomeValues)\n .optional()\n .describe(\n `Completion outcome (DEFAULT, SKIP_DESIGN, SKIP_DEV, HAS_BUGS, NEEDS_CLARIFICATION, FAILED). ${COMPLETE_AGENT_RUN_OUTCOME_SUMMARY}`\n ),\n note: z.string().nullable().optional().describe(\"Optional completion note\"),\n workItemPatch: z\n .object({\n description: z.string().nullable().optional().describe(\"Updated work item description\"),\n acceptanceCriteria: z.string().nullable().optional().describe(\"Updated acceptance criteria\"),\n designerRequired: z\n .boolean()\n .optional()\n .describe(\"Architect only: whether DESIGNER phase runs before development\")\n })\n .nullable()\n .optional()\n .describe(\"Optional work item field updates\")\n }\n },\n async ({ agentRunId, outcome, note, workItemPatch }) =>\n runTool(async () => {\n const body: CompleteAgentRunRequest = {};\n if (outcome !== undefined) {\n body.outcome = outcome as CompleteAgentRunRequest[\"outcome\"];\n }\n if (note !== undefined) {\n body.note = note;\n }\n if (workItemPatch !== undefined && workItemPatch !== null) {\n body.workItemPatch = workItemPatch;\n }\n const hasBody =\n outcome !== undefined || note !== undefined || (workItemPatch !== undefined && workItemPatch !== null);\n const response = await client.post<CompleteAgentRunResponse>(\n AGENT_RUNS_ROUTES.completeAgentRun(agentRunId),\n hasBody ? body : undefined\n );\n clearActiveRunAfterComplete(config);\n return response;\n })\n );\n}\n", "import type { AgentRunResponse } from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport { AGENT_RUN_STATUS } from \"@task-boards/api/enums/agent-run-status.enum\";\nimport { SUBAGENT_ROLE } from \"@task-boards/api/enums/subagent-role.enum\";\n\nimport {\n ATTENTION_MESSAGE_TEMPLATES,\n buildAttentionGuidance,\n deriveOrchestratorRunPhase,\n type AttentionMessageCategory,\n type OrchestratorRunPhase\n} from \"./orchestrator-attention.util.js\";\n\nexport type {\n AttentionMessageCategory,\n AttentionMessageTemplate,\n AttentionGuidance,\n OrchestratorRunPhase\n} from \"./orchestrator-attention.util.js\";\nexport {\n ATTENTION_MESSAGE_CATEGORY,\n ATTENTION_MESSAGE_TEMPLATES,\n buildAttentionGuidance,\n deriveOrchestratorRunPhase,\n formatAttentionMessage,\n parseAttentionMessageCategory\n} from \"./orchestrator-attention.util.js\";\n\nexport type PollResultSource = \"claimed\" | \"inflight\" | \"idle\";\n\nexport interface OrchestratorSleeperPolicy {\n /** Exactly one blocking poll per workspace/project at a time. */\n singleBlockingPoll: true;\n /** Do not invoke run_orchestrator_once / wait_for_agent_runs in parallel. */\n noParallelPoll: true;\n /** After timedOut, schedule at most one follow-up automation wake. */\n noDuplicateWake: true;\n /** Human-readable rationale for automation authors. */\n guidance: string;\n}\n\nexport interface OrchestratorInflightSummary {\n dispatchedCount: number;\n acknowledgedCount: number;\n requiresAttentionCount: number;\n agentRunIds: string[];\n}\n\nexport interface ProcessRunAttentionHint {\n phase: OrchestratorRunPhase;\n requiresAttention: boolean;\n message: string | null;\n detectedCategory: AttentionMessageCategory | null;\n /** One line: use report_agent_attention; replaces prior message on same ACK run */\n reportGuidance: string;\n /** Present when requiresAttention === true */\n clearGuidance: string | null;\n /** Keys into ATTENTION_MESSAGE_TEMPLATES for orchestrator copy-paste */\n templateCategories: AttentionMessageCategory[];\n}\n\nexport interface ProcessRunHint {\n agentRunId: string;\n workItemId: string;\n phase: OrchestratorRunPhase;\n /** \"claimed\" = fresh PENDING\u2192DISPATCHED; \"inflight\" = list recovery. */\n source: \"claimed\" | \"inflight\";\n steps: string[];\n attention?: ProcessRunAttentionHint;\n}\n\nexport interface OrchestratorAttentionSummary {\n blockedRunCount: number;\n blockedAgentRunIds: string[];\n /** true when any run has requiresAttention */\n resolveBeforeNewDispatch: boolean;\n}\n\nexport interface OrchestratorRunLifecycleDoc {\n phases: OrchestratorRunPhase[];\n terminalPhase: \"complete\";\n ideAttentionVsWorkflowAwaiting: string;\n}\n\nexport interface OrchestratorHints {\n phase: \"idle\" | \"processing\";\n pollResultSource: PollResultSource;\n sleeperPolicy: OrchestratorSleeperPolicy;\n nextSteps: string[];\n inflightSummary?: OrchestratorInflightSummary;\n processRuns?: ProcessRunHint[];\n attentionSummary?: OrchestratorAttentionSummary;\n runLifecycle?: OrchestratorRunLifecycleDoc;\n}\n\nconst SLEEPER_POLICY: OrchestratorSleeperPolicy = {\n singleBlockingPoll: true,\n noParallelPoll: true,\n noDuplicateWake: true,\n guidance:\n \"Run exactly one blocking poll (run_orchestrator_once or wait_for_agent_runs) per workspace at a time; do not overlap polls or stack duplicate automation wakes.\"\n};\n\nconst IDLE_INFLIGHT_CHECK_STEP = \"Checked inflight runs (DISPATCHED/ACKNOWLEDGED); none found \u2014 true idle.\";\n\nconst IDLE_NO_DUPLICATE_WAKE_STEP =\n \"Schedule at most one follow-up automation wake; do not stack duplicate sleepers while a poll is in flight.\";\n\nconst PROCESSING_NO_PARALLEL_POLL_STEP = \"Do not start another poll until this batch finishes.\";\n\nconst INFLIGHT_DISPATCHED_RECOVERY_STEP =\n \"Orphan DISPATCHED \u2014 resume Task+ack; avoid duplicate Task if subagent already running in this session\";\n\nconst IDLE_TIMEOUT_DO_NOT_CLEAR_ATTENTION =\n \"Do not clear_agent_attention on timeout; badge remains until human resolves in IDE\";\n\nconst IDLE_TIMEOUT_NEXT_STEPS: string[] = [\n \"Call sync_git_releases(projectId) to sync work-item commits\",\n IDLE_TIMEOUT_DO_NOT_CLEAR_ATTENTION,\n \"Call wait_for_agent_runs again (or run_orchestrator_once) to continue monitoring\"\n];\n\nconst IDE_ATTENTION_NOT_IN_AWAITING =\n \"IDE attention is not in-awaiting; do not move column; replace attention message on re-report\";\n\nconst PROCESSING_NEXT_STEPS: string[] = [\n \"Call sync_project_subagents(projectId) before Task dispatch when the project uses custom subagent slugs\",\n \"Agent runs only for STORY items assigned to \u0410\u0433\u0435\u043D\u0442 \u0418\u0418 (SERVICE user); assign via update_work_item before moving to agent columns\",\n \"When a subagent is blocked, call report_agent_attention(agentRunId, message); clear with clear_agent_attention after resolution\",\n \"After processing all runs: local git commit with work-item:{uuid} tag (skip commit and sync_git_releases when any run completed with SKIP_DEV)\",\n \"On feature branch (not master/main): git push origin HEAD then sync_git_releases(projectId)\",\n \"Parallel Task runs OK for same workItemId when agentRole differs (e.g. FRONTEND_DEVELOPER + DEVELOPER)\",\n \"Claim priority: in-development > in-qa > in-analysis; in-analysis blocked while SERVICE-assigned stories exist in dev/qa\",\n \"Call run_orchestrator_once or wait_for_agent_runs to continue monitoring\"\n];\n\nconst ATTENTION_PROCESSING_NEXT_STEPS: string[] = [\n \"Resolve requiresAttention runs before dispatching new Task subagents\",\n IDE_ATTENTION_NOT_IN_AWAITING,\n \"Call clear_agent_attention(agentRunId) after each blocker is resolved\"\n];\n\nconst RUN_LIFECYCLE_DOC: OrchestratorRunLifecycleDoc = {\n phases: [\"dispatched\", \"acknowledged\", \"awaiting_ide_approval\", \"ready_to_complete\"],\n terminalPhase: \"complete\",\n ideAttentionVsWorkflowAwaiting:\n \"IDE attention (report_agent_attention on ACKNOWLEDGED runs) is not in-awaiting \u2014 do not move the story column for shell/git/network/MCP/Smart Mode approvals. Use complete_agent_run(NEEDS_CLARIFICATION) and in-awaiting only for workflow clarifications.\"\n};\n\nfunction buildTaskStep(run: AgentRunResponse): string {\n const subagent = run.payload.suggestedSubagentType ?? \"subagent\";\n return `Task(subagent_type=${subagent}, prompt=payload.contextSummary)`;\n}\n\nfunction buildCompleteStep(run: AgentRunResponse): string {\n if (run.agentRole === SUBAGENT_ROLE.ARCHITECT) {\n return \"complete_agent_run after work; architect may set workItemPatch.designerRequired (boolean, default false)\";\n }\n\n if (run.agentRole === SUBAGENT_ROLE.ANALYST) {\n return \"complete_agent_run after work; use outcome SKIP_DEV when codeChangesRequired=false (released without git commit)\";\n }\n\n return \"complete_agent_run after work\";\n}\n\nfunction buildGitCommitStep(run: AgentRunResponse): string {\n if (run.agentRole === SUBAGENT_ROLE.ANALYST) {\n return \"skip git commit and sync_git_releases when outcome SKIP_DEV; otherwise git commit with work-item tag (local; push only on feature branch)\";\n }\n\n return \"git commit with work-item tag (local; push only on feature branch)\";\n}\n\nfunction buildReportAttentionStep(run: AgentRunResponse): string {\n return `report_agent_attention(${run.id}, message) if blocked awaiting human input \u2014 ${ATTENTION_MESSAGE_TEMPLATES.shell.messagePattern.replace(\"{detail}\", \"<detail>\")}; replaces prior message on re-report`;\n}\n\nfunction buildProcessRunAttentionHint(run: AgentRunResponse): ProcessRunAttentionHint {\n const guidance = buildAttentionGuidance(run);\n\n return {\n phase: guidance.phase,\n requiresAttention: run.requiresAttention,\n message: run.attentionMessage,\n detectedCategory: guidance.detectedCategory,\n reportGuidance: `report_agent_attention(${run.id}, message) using formatAttentionMessage(category, detail); replaces prior message on same ACK run`,\n clearGuidance: guidance.clearStep,\n templateCategories: guidance.templateExamples\n };\n}\n\nfunction buildDispatchedProcessRunSteps(run: AgentRunResponse): string[] {\n return [\n \"sync_project_subagents(projectId) when payload.suggestedSubagentType is a project custom slug\",\n `list_work_item_attachments(${run.workItemId})`,\n \"download_work_item_attachments if needed\",\n buildTaskStep(run),\n `ack_agent_run(${run.id})`,\n buildReportAttentionStep(run),\n `clear_agent_attention(${run.id}) after human resolves in IDE`,\n buildCompleteStep(run),\n buildGitCommitStep(run)\n ];\n}\n\nfunction buildAwaitingIdeApprovalProcessRunSteps(run: AgentRunResponse): string[] {\n return [\n `clear_agent_attention(${run.id}) after resolving: ${run.attentionMessage ?? \"attention flag\"}`,\n buildCompleteStep(run),\n buildGitCommitStep(run)\n ];\n}\n\nfunction buildAcknowledgedProcessRunSteps(run: AgentRunResponse): string[] {\n return [\n \"Resume subagent work (Task may already be running in this session)\",\n buildReportAttentionStep(run),\n `clear_agent_attention(${run.id}) after human resolves in IDE`,\n buildCompleteStep(run),\n buildGitCommitStep(run)\n ];\n}\n\nfunction buildProcessRunHint(run: AgentRunResponse, source: \"claimed\" | \"inflight\"): ProcessRunHint {\n const phase = deriveOrchestratorRunPhase(run);\n\n if (phase === \"awaiting_ide_approval\") {\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps: buildAwaitingIdeApprovalProcessRunSteps(run),\n attention: buildProcessRunAttentionHint(run)\n };\n }\n\n if (phase === \"acknowledged\") {\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps: buildAcknowledgedProcessRunSteps(run)\n };\n }\n\n const steps = buildDispatchedProcessRunSteps(run);\n if (source === \"inflight\") {\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps: [INFLIGHT_DISPATCHED_RECOVERY_STEP, ...steps]\n };\n }\n\n return {\n agentRunId: run.id,\n workItemId: run.workItemId,\n phase,\n source,\n steps\n };\n}\n\nfunction buildProcessRuns(items: AgentRunResponse[], inflightRuns: AgentRunResponse[]): ProcessRunHint[] {\n const hints: ProcessRunHint[] = [];\n\n for (const run of items) {\n if (run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"claimed\"));\n }\n }\n\n for (const run of inflightRuns) {\n if (run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"inflight\"));\n }\n }\n\n for (const run of inflightRuns) {\n if (!run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"inflight\"));\n }\n }\n\n for (const run of items) {\n if (!run.requiresAttention) {\n hints.push(buildProcessRunHint(run, \"claimed\"));\n }\n }\n\n return hints;\n}\n\nfunction buildAttentionSummary(runs: AgentRunResponse[]): OrchestratorAttentionSummary {\n const blockedRuns = runs.filter(run => run.requiresAttention);\n\n return {\n blockedRunCount: blockedRuns.length,\n blockedAgentRunIds: blockedRuns.map(run => run.id),\n resolveBeforeNewDispatch: blockedRuns.length > 0\n };\n}\n\nfunction buildInflightSummary(inflightRuns: AgentRunResponse[]): OrchestratorInflightSummary | undefined {\n if (inflightRuns.length === 0) {\n return undefined;\n }\n\n return {\n dispatchedCount: inflightRuns.filter(run => run.status === AGENT_RUN_STATUS.DISPATCHED).length,\n acknowledgedCount: inflightRuns.filter(run => run.status === AGENT_RUN_STATUS.ACKNOWLEDGED).length,\n requiresAttentionCount: inflightRuns.filter(run => run.requiresAttention).length,\n agentRunIds: inflightRuns.map(run => run.id)\n };\n}\n\nfunction derivePollResultSource(items: AgentRunResponse[], inflightRuns: AgentRunResponse[]): PollResultSource {\n if (items.length > 0) {\n return \"claimed\";\n }\n\n if (inflightRuns.length > 0) {\n return \"inflight\";\n }\n\n return \"idle\";\n}\n\nexport function buildOrchestratorHints(\n items: AgentRunResponse[],\n inflightRuns: AgentRunResponse[],\n timedOut: boolean\n): OrchestratorHints {\n const pollResultSource = derivePollResultSource(items, inflightRuns);\n const allRuns = [...items, ...inflightRuns];\n\n if (timedOut) {\n return {\n phase: \"idle\",\n pollResultSource,\n sleeperPolicy: SLEEPER_POLICY,\n nextSteps: [IDLE_INFLIGHT_CHECK_STEP, ...IDLE_TIMEOUT_NEXT_STEPS, IDLE_NO_DUPLICATE_WAKE_STEP]\n };\n }\n\n if (allRuns.length === 0) {\n return {\n phase: \"idle\",\n pollResultSource,\n sleeperPolicy: SLEEPER_POLICY,\n nextSteps: [IDLE_INFLIGHT_CHECK_STEP, ...IDLE_TIMEOUT_NEXT_STEPS, IDLE_NO_DUPLICATE_WAKE_STEP]\n };\n }\n\n const hasAttentionRuns = allRuns.some(run => run.requiresAttention);\n\n return {\n phase: \"processing\",\n pollResultSource,\n sleeperPolicy: SLEEPER_POLICY,\n inflightSummary: buildInflightSummary(inflightRuns),\n processRuns: buildProcessRuns(items, inflightRuns),\n attentionSummary: buildAttentionSummary(allRuns),\n runLifecycle: RUN_LIFECYCLE_DOC,\n nextSteps: hasAttentionRuns\n ? [PROCESSING_NO_PARALLEL_POLL_STEP, ...ATTENTION_PROCESSING_NEXT_STEPS, ...PROCESSING_NEXT_STEPS]\n : [PROCESSING_NO_PARALLEL_POLL_STEP, ...PROCESSING_NEXT_STEPS]\n };\n}\n\nexport function enrichPollResult(\n items: AgentRunResponse[],\n inflightRuns: AgentRunResponse[],\n timedOut: boolean\n): {\n items: AgentRunResponse[];\n inflightRuns: AgentRunResponse[];\n timedOut: boolean;\n orchestrator: OrchestratorHints;\n} {\n return {\n items,\n inflightRuns,\n timedOut,\n orchestrator: buildOrchestratorHints(items, inflightRuns, timedOut)\n };\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { AgentRunResponse } from \"@task-boards/api/agent-runs/agent-runs.types\";\nimport type { ProjectResolutionSource } from \"@task-boards/api/projects/project-binding.types\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { resolveProject } from \"../workspace/resolve-project.js\";\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\nimport { enrichPollResult, type OrchestratorHints } from \"./orchestrator-hints.js\";\nimport { runTool } from \"./tool-utils.js\";\nimport { pollAgentRuns } from \"./wait-for-agent-runs.js\";\n\nexport type RunOrchestratorResolutionSource = ProjectResolutionSource | \"explicit\";\n\nexport interface RunOrchestratorOnceOptions {\n projectId?: string;\n timeoutMs: number;\n pollIntervalMs: number;\n limit: number;\n workspaceRootOverride?: string;\n envWorkspaceRoot?: string;\n}\n\nexport interface RunOrchestratorOnceResponse {\n projectId: string;\n resolutionSource: RunOrchestratorResolutionSource;\n items: AgentRunResponse[];\n inflightRuns: AgentRunResponse[];\n timedOut: boolean;\n orchestrator: OrchestratorHints;\n}\n\nexport async function runOrchestratorOnce(\n client: RestClient,\n options: RunOrchestratorOnceOptions\n): Promise<RunOrchestratorOnceResponse> {\n let projectId = options.projectId;\n let resolutionSource: RunOrchestratorResolutionSource = \"explicit\";\n\n if (projectId === undefined) {\n const resolved = await resolveProject(client, {\n workspaceRootOverride: options.workspaceRootOverride,\n envWorkspaceRoot: options.envWorkspaceRoot\n });\n\n if (resolved.projectId === null) {\n const hint = resolved.hint ?? \"Could not resolve project for workspace.\";\n throw new WorkspaceError(\"PROJECT_NOT_FOUND\", hint);\n }\n\n projectId = resolved.projectId;\n resolutionSource = resolved.resolutionSource;\n }\n\n const pollResult = await pollAgentRuns(client, {\n projectId,\n timeoutMs: options.timeoutMs,\n pollIntervalMs: options.pollIntervalMs,\n limit: options.limit\n });\n\n const enriched = enrichPollResult(pollResult.items, pollResult.inflightRuns, pollResult.timedOut);\n\n return {\n projectId,\n resolutionSource,\n items: enriched.items,\n inflightRuns: enriched.inflightRuns,\n timedOut: enriched.timedOut,\n orchestrator: enriched.orchestrator\n };\n}\n\nexport function registerOrchestratorTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"run_orchestrator_once\",\n {\n description:\n \"Resolve project (if needed), long-poll agent runs with atomic claim, and return orchestrator hints. Claims only STORY items assigned to \u0410\u0433\u0435\u043D\u0442 \u0418\u0418 (SERVICE user). Does not call sync_git_releases \u2014 the orchestrator agent decides when to sync.\",\n inputSchema: {\n projectId: z\n .string()\n .uuid()\n .optional()\n .describe(\"Project UUID; when omitted, resolves via .task-boards.yaml / .cursor/rules / folder name\"),\n timeout: z.number().int().min(1).max(300).default(120).describe(\"Maximum wait in seconds (1\u2013300, default 120)\"),\n pollInterval: z\n .number()\n .int()\n .min(1)\n .max(60)\n .default(2)\n .describe(\"Seconds between polls (1\u201360, default 2); must not exceed timeout\"),\n limit: z.number().int().min(1).max(10).default(1).describe(\"Max runs to claim per poll (1\u201310, default 1)\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute workspace root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ projectId, timeout, pollInterval, limit, workspaceRoot }) =>\n runTool(\n async (): Promise<RunOrchestratorOnceResponse> =>\n runOrchestratorOnce(client, {\n projectId,\n timeoutMs: timeout * 1000,\n pollIntervalMs: pollInterval * 1000,\n limit,\n workspaceRootOverride: workspaceRoot,\n envWorkspaceRoot: config.workspaceRoot\n })\n )\n );\n}\n", "import { basename } from \"node:path\";\n\nimport { PROJECTS_ROUTES } from \"@task-boards/api/projects/projects.api\";\nimport type { ResolveProjectResponse } from \"@task-boards/api/projects/project-binding.types\";\nimport type { ProjectListResponse, ProjectResponse } from \"@task-boards/api/projects/projects.types\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { autoMatchProject } from \"./auto-match-project.js\";\nimport { parseIdeRules } from \"./parse-ide-rules.js\";\nimport { parseTaskBoardsYaml } from \"./parse-task-boards-yaml.js\";\nimport { resolveWorkspaceRoot } from \"./resolve-workspace-root.js\";\n\nexport interface ResolveProjectOptions {\n workspaceRootOverride?: string;\n envWorkspaceRoot?: string;\n}\n\nfunction emptyResponse(workspaceRoot: string): ResolveProjectResponse {\n return {\n resolutionSource: \"ambiguous\",\n workspaceRoot,\n projectId: null,\n name: null,\n key: null,\n presetCode: null,\n hint: \"No project binding found. Add .task-boards.yaml, an IDE rule (.cursor/rules) with projectId, or rename the folder to match a project key/name.\"\n };\n}\n\nfunction fromProject(\n workspaceRoot: string,\n resolutionSource: ResolveProjectResponse[\"resolutionSource\"],\n project: ProjectResponse\n): ResolveProjectResponse {\n return {\n resolutionSource,\n workspaceRoot,\n projectId: project.id,\n name: project.name,\n key: project.key,\n presetCode: project.presetCode\n };\n}\n\nasync function enrichProject(\n client: RestClient,\n workspaceRoot: string,\n resolutionSource: ResolveProjectResponse[\"resolutionSource\"],\n projectId: string\n): Promise<ResolveProjectResponse> {\n const project = await client.get<ProjectResponse>(PROJECTS_ROUTES.getProject(projectId));\n return fromProject(workspaceRoot, resolutionSource, project);\n}\n\nexport async function resolveProject(\n client: RestClient,\n options: ResolveProjectOptions = {}\n): Promise<ResolveProjectResponse> {\n const workspaceRoot = resolveWorkspaceRoot(options.workspaceRootOverride, options.envWorkspaceRoot);\n\n const yamlProjectId = parseTaskBoardsYaml(workspaceRoot);\n if (yamlProjectId !== null) {\n return enrichProject(client, workspaceRoot, \"yaml\", yamlProjectId);\n }\n\n const rulesResult = parseIdeRules(workspaceRoot);\n if (rulesResult.status === \"ambiguous\") {\n return {\n ...emptyResponse(workspaceRoot),\n hint: \"Multiple distinct projectId values found in .cursor/rules. Use .task-boards.yaml or set WORKSPACE_ROOT to a single-project workspace.\"\n };\n }\n if (rulesResult.status === \"found\") {\n return enrichProject(client, workspaceRoot, \"rule\", rulesResult.projectId);\n }\n\n const folderToken = basename(workspaceRoot);\n const listResponse = await client.get<ProjectListResponse>(PROJECTS_ROUTES.listProjects());\n const autoMatch = autoMatchProject(folderToken, listResponse.items);\n\n if (autoMatch.kind === \"single\") {\n return enrichProject(client, workspaceRoot, \"auto_match\", autoMatch.project.id);\n }\n\n if (autoMatch.kind === \"candidates\") {\n return {\n resolutionSource: \"ambiguous\",\n workspaceRoot,\n projectId: null,\n name: null,\n key: null,\n presetCode: null,\n candidates: autoMatch.candidates,\n hint: `Multiple projects match folder name \"${folderToken}\". Pick one candidate or add .task-boards.yaml.`\n };\n }\n\n return emptyResponse(workspaceRoot);\n}\n", "export function normalizeToken(value: string): string {\n return value\n .toLowerCase()\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]/g, \"\");\n}\n", "import type { BoardPresetCode } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport type { ResolveProjectCandidate } from \"@task-boards/api/projects/project-binding.types\";\nimport type { ProjectResponse } from \"@task-boards/api/projects/projects.types\";\n\nimport { normalizeToken } from \"./normalize-token.js\";\n\nexport interface AutoMatchProjectInput {\n id: string;\n name: string;\n key: string;\n presetCode: BoardPresetCode;\n}\n\nexport type AutoMatchProjectResult =\n | { kind: \"single\"; project: AutoMatchProjectInput; matchedBy: \"key\" | \"name\" }\n | { kind: \"candidates\"; candidates: ResolveProjectCandidate[] }\n | { kind: \"none\" };\n\nfunction toCandidate(project: AutoMatchProjectInput, matchedBy: \"key\" | \"name\"): ResolveProjectCandidate {\n return {\n projectId: project.id,\n name: project.name,\n key: project.key,\n presetCode: project.presetCode,\n matchedBy\n };\n}\n\nexport function autoMatchProject(folderToken: string, projects: ProjectResponse[]): AutoMatchProjectResult {\n const normalizedFolder = normalizeToken(folderToken);\n if (normalizedFolder.length === 0) {\n return { kind: \"none\" };\n }\n\n const keyMatches: AutoMatchProjectInput[] = [];\n const nameMatches: AutoMatchProjectInput[] = [];\n\n for (const project of projects) {\n const input: AutoMatchProjectInput = {\n id: project.id,\n name: project.name,\n key: project.key,\n presetCode: project.presetCode\n };\n\n if (normalizeToken(project.key) === normalizedFolder) {\n keyMatches.push(input);\n }\n if (normalizeToken(project.name) === normalizedFolder) {\n nameMatches.push(input);\n }\n }\n\n const uniqueById = new Map<string, { project: AutoMatchProjectInput; matchedBy: \"key\" | \"name\" }>();\n for (const project of keyMatches) {\n uniqueById.set(project.id, { project, matchedBy: \"key\" });\n }\n for (const project of nameMatches) {\n if (!uniqueById.has(project.id)) {\n uniqueById.set(project.id, { project, matchedBy: \"name\" });\n }\n }\n\n const matches = [...uniqueById.values()];\n if (matches.length === 1) {\n const match = matches[0];\n if (match === undefined) {\n return { kind: \"none\" };\n }\n return { kind: \"single\", project: match.project, matchedBy: match.matchedBy };\n }\n if (matches.length > 1) {\n return {\n kind: \"candidates\",\n candidates: matches.map(match => toCandidate(match.project, match.matchedBy))\n };\n }\n\n return { kind: \"none\" };\n}\n", "import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst PROJECT_ID_LINE_PATTERN =\n /projectId\\s*[:=]\\s*[\"']?([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/gi;\n\nconst TASK_BOARDS_UUID_PATTERN =\n /task-boards[^\\n\\r]*?([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/gi;\n\nexport type ParseIdeRulesResult =\n | { status: \"found\"; projectId: string }\n | { status: \"missing\" }\n | { status: \"ambiguous\" };\n\nfunction extractUuids(content: string): Set<string> {\n const ids = new Set<string>();\n\n for (const pattern of [PROJECT_ID_LINE_PATTERN, TASK_BOARDS_UUID_PATTERN]) {\n pattern.lastIndex = 0;\n let match = pattern.exec(content);\n while (match !== null) {\n const id = match[1];\n if (id !== undefined) {\n ids.add(id.toLowerCase());\n }\n match = pattern.exec(content);\n }\n }\n\n return ids;\n}\n\nexport function parseIdeRules(workspaceRoot: string): ParseIdeRulesResult {\n const rulesDir = join(workspaceRoot, \".cursor\", \"rules\");\n if (!existsSync(rulesDir)) {\n return { status: \"missing\" };\n }\n\n const entries = readdirSync(rulesDir, { withFileTypes: true });\n const allIds = new Set<string>();\n\n for (const entry of entries) {\n if (!entry.isFile()) {\n continue;\n }\n if (!entry.name.endsWith(\".mdc\") && !entry.name.endsWith(\".md\")) {\n continue;\n }\n\n const content = readFileSync(join(rulesDir, entry.name), \"utf8\");\n for (const id of extractUuids(content)) {\n allIds.add(id);\n }\n }\n\n if (allIds.size === 0) {\n return { status: \"missing\" };\n }\n if (allIds.size === 1) {\n const projectId = [...allIds][0];\n if (projectId === undefined) {\n return { status: \"missing\" };\n }\n return { status: \"found\", projectId };\n }\n return { status: \"ambiguous\" };\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { BOARDS_ROUTES } from \"@task-boards/api/boards/boards.api\";\nimport type { BoardResponse } from \"@task-boards/api/boards/boards.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerBoardTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"get_board\",\n {\n description: \"Get board projection for a project (columns and on-board work items).\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\")\n }\n },\n async ({ projectId }) => runTool(async () => client.get<BoardResponse>(BOARDS_ROUTES.getBoard(projectId)))\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { LABEL_COLOR } from \"@task-boards/api/enums/label-color.enum\";\nimport { LABELS_ROUTES } from \"@task-boards/api/labels/labels.api\";\nimport type {\n CreateLabelRequest,\n LabelListResponse,\n LabelResponse,\n UpdateLabelRequest\n} from \"@task-boards/api/labels/labels.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nconst labelColorValues = Object.values(LABEL_COLOR) as [string, ...string[]];\n\nexport function registerLabelTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_labels\",\n {\n description: \"List labels for a project.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\")\n }\n },\n async ({ projectId }) => runTool(async () => client.get<LabelListResponse>(LABELS_ROUTES.listLabels(projectId)))\n );\n\n server.registerTool(\n \"create_label\",\n {\n description: \"Create a project label.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n name: z.string().min(1).max(64).describe(\"Label name\"),\n color: z.enum(labelColorValues).describe(\"Label color\")\n }\n },\n async ({ projectId, name, color }) =>\n runTool(async () => {\n const body: CreateLabelRequest = {\n name,\n color: color as CreateLabelRequest[\"color\"]\n };\n return client.post<LabelResponse>(LABELS_ROUTES.createLabel(projectId), body);\n })\n );\n\n server.registerTool(\n \"update_label\",\n {\n description: \"Update a project label.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n labelId: z.string().uuid().describe(\"Label UUID\"),\n name: z.string().min(1).max(64).optional().describe(\"Updated label name\"),\n color: z.enum(labelColorValues).optional().describe(\"Updated label color\")\n }\n },\n async ({ projectId, labelId, name, color }) =>\n runTool(async () => {\n const body: UpdateLabelRequest = {\n name,\n color: color as UpdateLabelRequest[\"color\"]\n };\n return client.patch<LabelResponse>(LABELS_ROUTES.updateLabel(projectId, labelId), body);\n })\n );\n\n server.registerTool(\n \"delete_label\",\n {\n description: \"Delete a project label.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n labelId: z.string().uuid().describe(\"Label UUID\")\n }\n },\n async ({ projectId, labelId }) =>\n runTool(async () => {\n await client.delete(LABELS_ROUTES.deleteLabel(projectId, labelId));\n return { deleted: true };\n })\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { BOARD_PRESET_CODE } from \"@task-boards/api/enums/board-preset-code.enum\";\nimport { ESTIMATION_MODE } from \"@task-boards/api/enums/estimation-mode.enum\";\nimport { SUBAGENT_ROLE } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { TASK_CARD_ESTIMATION_DISPLAY } from \"@task-boards/api/enums/task-card-estimation-display.enum\";\nimport { PROJECTS_ROUTES } from \"@task-boards/api/projects/projects.api\";\nimport type { ProjectListResponse, ProjectResponse } from \"@task-boards/api/projects/projects.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool, toolError } from \"./tool-utils.js\";\n\nconst CREATE_PROJECT_FORBIDDEN_MESSAGE =\n \"Project creation requires a human session. Create projects in the task-boards web UI.\";\n\nconst UPDATE_PROJECT_FORBIDDEN_MESSAGE =\n \"Project settings updates require a human session. Use the task-boards web UI.\";\n\nconst boardPresetValues = Object.values(BOARD_PRESET_CODE) as [string, ...string[]];\nconst estimationModeValues = Object.values(ESTIMATION_MODE) as [string, ...string[]];\nconst taskCardEstimationDisplayValues = Object.values(TASK_CARD_ESTIMATION_DISPLAY) as [string, ...string[]];\nconst subagentRoleValues = Object.values(SUBAGENT_ROLE) as [string, ...string[]];\nconst subagentRoleBindingEntrySchema = z.object({\n slug: z.string().min(1),\n enabled: z.boolean().optional().default(true)\n});\n\nconst subagentRoleBindingSchema = z.record(z.enum(subagentRoleValues), subagentRoleBindingEntrySchema);\n\nexport function registerProjectTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_projects\",\n {\n description: \"List task-boards projects (non-archived by default).\",\n inputSchema: {\n status: z.enum([\"ACTIVE\", \"ARCHIVED\", \"ALL\"]).optional().describe(\"Filter by project status\")\n }\n },\n async ({ status }) =>\n runTool(async () => {\n const params: Record<string, string | undefined> = {};\n if (status !== undefined) {\n params.status = status.toLowerCase();\n }\n return client.get<ProjectListResponse>(PROJECTS_ROUTES.listProjects(), params);\n })\n );\n\n server.registerTool(\n \"get_project\",\n {\n description: \"Get a project by id.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\")\n }\n },\n async ({ projectId }) => runTool(async () => client.get<ProjectResponse>(PROJECTS_ROUTES.getProject(projectId)))\n );\n\n server.registerTool(\n \"create_project\",\n {\n description: \"Create a project and its board from the selected preset.\",\n inputSchema: {\n name: z.string().min(1).max(255).describe(\"Project display name\"),\n presetCode: z.enum(boardPresetValues).describe(\"Board preset code\"),\n description: z.string().nullable().optional().describe(\"Optional project description\"),\n key: z\n .string()\n .regex(/^[A-Z][A-Z0-9_]*$/)\n .max(32)\n .optional()\n .describe(\"Optional project key; derived from name when omitted\")\n }\n },\n async () => Promise.resolve(toolError(\"FORBIDDEN\", CREATE_PROJECT_FORBIDDEN_MESSAGE))\n );\n\n server.registerTool(\n \"update_project\",\n {\n description:\n \"Update project settings (name, description, estimation mode/required, task card estimation display, subagent role bindings). Requires write scope.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n name: z.string().min(1).max(255).optional().describe(\"Updated project name\"),\n description: z.string().nullable().optional().describe(\"Updated project description\"),\n estimationMode: z\n .enum(estimationModeValues)\n .optional()\n .describe(\"Active estimation field: storyPoints or estimate (hours)\"),\n estimationRequired: z\n .boolean()\n .optional()\n .describe(\"When true, active estimation field is required on EPIC/STORY\"),\n taskCardEstimationDisplay: z\n .enum(taskCardEstimationDisplayValues)\n .optional()\n .describe(\"Estimation badge on TaskCard: storyPoints, estimate, or none\"),\n subagentRoleBindings: subagentRoleBindingSchema\n .optional()\n .describe(\n \"Map SUBAGENT_ROLE to { slug, enabled } (enabled defaults true; disabled keeps slug but skips flow)\"\n )\n }\n },\n async () => Promise.resolve(toolError(\"FORBIDDEN\", UPDATE_PROJECT_FORBIDDEN_MESSAGE))\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ResolveProjectResponse } from \"@task-boards/api/projects/project-binding.types\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { resolveProject } from \"../workspace/resolve-project.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerResolveProjectTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"resolve_project\",\n {\n description:\n \"Resolve the task-boards project for the current workspace (.task-boards.yaml, .cursor/rules, or folder name auto-match).\",\n inputSchema: {\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to workspace root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ workspaceRoot }) => {\n const resolvedWorkspaceRoot = workspaceRoot ?? config.workspaceRoot;\n return runTool(\n async (): Promise<ResolveProjectResponse> =>\n resolveProject(client, {\n workspaceRootOverride: workspaceRoot,\n envWorkspaceRoot: config.workspaceRoot\n }),\n { workspaceRoot: resolvedWorkspaceRoot }\n );\n }\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport { syncGitReleasesFromRepo } from \"../git/commit-release-sync.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { resolveWorkspaceRoot } from \"../workspace/resolve-workspace-root.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerSyncGitReleasesTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n server.registerTool(\n \"sync_git_releases\",\n {\n description:\n \"Fetch origin and sync commits tagged with work-item:{uuid} from the default branch (master/main) and, when cwd is on a feature branch, the current branch too. Use after git push on feature branches; on master/main local commit only. Requires MCP API token with write scope.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to git repo root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ projectId, workspaceRoot }) =>\n runTool(async () => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return syncGitReleasesFromRepo(client, {\n projectId,\n workspaceRoot: resolvedWorkspaceRoot\n });\n })\n );\n}\n", "import { GIT_RELEASE_ROUTES } from \"@task-boards/api/git-release/git-release.api\";\nimport type { GitReleaseItemRequest, SyncGitReleasesResponse } from \"@task-boards/api/git-release/git-release.types\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { createDefaultGitRunner, type GitRunner, type ReleaseCommitRow } from \"./git-runner.js\";\nimport { isValidGitSha } from \"./story-branch.util.js\";\nimport { parseWorkItemIdsFromCommitMessage } from \"./work-item-commit.util.js\";\n\nexport interface CommitReleaseCandidate {\n workItemId: string;\n commitSha: string;\n commitMessage: string;\n committerDateUnix: number;\n}\n\nexport interface SyncGitReleasesFromRepoOptions {\n projectId: string;\n workspaceRoot: string;\n}\n\nexport interface SyncGitReleasesFromRepoResult extends SyncGitReleasesResponse {\n scannedCommits: number;\n dedupedCount: number;\n}\n\nexport interface SyncGitReleasesFromRepoDeps {\n gitRunner?: GitRunner;\n}\n\nexport function buildCommitReleaseCandidates(rows: ReleaseCommitRow[]): CommitReleaseCandidate[] {\n const candidates: CommitReleaseCandidate[] = [];\n\n for (const row of rows) {\n if (!isValidGitSha(row.commitSha)) {\n continue;\n }\n\n const workItemIds = parseWorkItemIdsFromCommitMessage(row.commitMessage);\n if (workItemIds.length === 0) {\n continue;\n }\n\n const commitSha = row.commitSha.toLowerCase();\n for (const workItemId of workItemIds) {\n candidates.push({\n workItemId,\n commitSha,\n commitMessage: row.commitMessage,\n committerDateUnix: row.committerDateUnix\n });\n }\n }\n\n return candidates;\n}\n\nexport function dedupeCommitReleasesByWorkItemId(candidates: CommitReleaseCandidate[]): GitReleaseItemRequest[] {\n const byWorkItemId = new Map<string, CommitReleaseCandidate>();\n\n for (const candidate of candidates) {\n const existing = byWorkItemId.get(candidate.workItemId);\n if (existing === undefined || candidate.committerDateUnix > existing.committerDateUnix) {\n byWorkItemId.set(candidate.workItemId, candidate);\n }\n }\n\n return Array.from(byWorkItemId.values()).map(\n (candidate): GitReleaseItemRequest => ({\n workItemId: candidate.workItemId,\n commitSha: candidate.commitSha,\n commitMessage: candidate.commitMessage\n })\n );\n}\n\nexport async function syncGitReleasesFromRepo(\n client: RestClient,\n options: SyncGitReleasesFromRepoOptions,\n deps?: SyncGitReleasesFromRepoDeps\n): Promise<SyncGitReleasesFromRepoResult> {\n const gitRunner = deps?.gitRunner ?? createDefaultGitRunner();\n const { projectId, workspaceRoot } = options;\n\n await gitRunner.fetchRemote(workspaceRoot);\n const rows = await gitRunner.listReleaseCommits(workspaceRoot);\n const candidates = buildCommitReleaseCandidates(rows);\n const releases = dedupeCommitReleasesByWorkItemId(candidates);\n\n const response = await client.post<SyncGitReleasesResponse>(GIT_RELEASE_ROUTES.syncGitReleases(projectId), {\n releases\n });\n\n return {\n ...response,\n scannedCommits: rows.length,\n dedupedCount: releases.length\n };\n}\n", "import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nimport { WorkspaceError } from \"../workspace/workspace-error.js\";\n\nconst execFileAsync = promisify(execFile);\n\nconst RECORD_SEPARATOR = \"\\u001d\";\nconst FIELD_SEPARATOR = \"\\u001f\";\n\nconst DEFAULT_BRANCH_NAMES = new Set([\"master\", \"main\"]);\n\nexport interface ReleaseCommitRow {\n commitSha: string;\n commitMessage: string;\n committerDateUnix: number;\n}\n\nexport interface GitRunner {\n fetchRemote(cwd: string): Promise<void>;\n listReleaseCommits(cwd: string): Promise<ReleaseCommitRow[]>;\n getCurrentBranch(cwd: string): Promise<string>;\n}\n\nfunction wrapGitError(operation: string): WorkspaceError {\n return new WorkspaceError(\"GIT_ERROR\", `git ${operation} failed`);\n}\n\nexport function isDefaultReleaseBranch(branchName: string): boolean {\n return DEFAULT_BRANCH_NAMES.has(branchName.trim().toLowerCase());\n}\n\nexport class ProcessGitRunner implements GitRunner {\n async fetchRemote(cwd: string): Promise<void> {\n try {\n await execFileAsync(\"git\", [\"fetch\", \"origin\"], { cwd });\n } catch {\n throw wrapGitError(\"fetch origin\");\n }\n }\n\n async getCurrentBranch(cwd: string): Promise<string> {\n try {\n const result = await execFileAsync(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], { cwd });\n const branch = result.stdout.trim();\n if (branch.length === 0) {\n throw new WorkspaceError(\"GIT_ERROR\", \"Could not resolve current branch\");\n }\n\n return branch;\n } catch (error: unknown) {\n if (error instanceof WorkspaceError) {\n throw error;\n }\n\n throw wrapGitError(\"resolve current branch\");\n }\n }\n\n async listReleaseCommits(cwd: string): Promise<ReleaseCommitRow[]> {\n const defaultBranchRef = await this.resolveOriginDefaultBranchRef(cwd);\n const refs = [defaultBranchRef];\n\n const currentBranch = await this.getCurrentBranch(cwd);\n if (isDefaultReleaseBranch(currentBranch)) {\n refs.push(\"HEAD\");\n } else {\n refs.push(currentBranch);\n }\n\n const rows: ReleaseCommitRow[] = [];\n const seenShas = new Set<string>();\n\n for (const ref of refs) {\n const refRows = await this.listCommitsForRef(cwd, ref);\n for (const row of refRows) {\n const normalizedSha = row.commitSha.toLowerCase();\n if (seenShas.has(normalizedSha)) {\n continue;\n }\n\n seenShas.add(normalizedSha);\n rows.push(row);\n }\n }\n\n return rows;\n }\n\n private async listCommitsForRef(cwd: string, ref: string): Promise<ReleaseCommitRow[]> {\n let stdout: string;\n\n try {\n const result = await execFileAsync(\n \"git\",\n [\"log\", ref, `--format=%ct${FIELD_SEPARATOR}%H${FIELD_SEPARATOR}%B${RECORD_SEPARATOR}`],\n { cwd, maxBuffer: 10 * 1024 * 1024 }\n );\n stdout = result.stdout;\n } catch {\n throw wrapGitError(`log ${ref}`);\n }\n\n const rows: ReleaseCommitRow[] = [];\n const records = stdout.split(RECORD_SEPARATOR);\n\n for (const record of records) {\n const trimmed = record.trim();\n if (trimmed.length === 0) {\n continue;\n }\n\n const firstSeparator = trimmed.indexOf(FIELD_SEPARATOR);\n const secondSeparator = trimmed.indexOf(FIELD_SEPARATOR, firstSeparator + 1);\n if (firstSeparator < 0 || secondSeparator < 0) {\n continue;\n }\n\n const committerDateUnix = Number.parseInt(trimmed.slice(0, firstSeparator), 10);\n const commitSha = trimmed.slice(firstSeparator + 1, secondSeparator).trim();\n const commitMessage = trimmed.slice(secondSeparator + 1);\n\n if (!Number.isFinite(committerDateUnix) || commitSha.length === 0 || commitMessage.length === 0) {\n continue;\n }\n\n rows.push({ commitSha, commitMessage, committerDateUnix });\n }\n\n return rows;\n }\n\n private async resolveOriginDefaultBranchRef(cwd: string): Promise<string> {\n try {\n const result = await execFileAsync(\"git\", [\"symbolic-ref\", \"refs/remotes/origin/HEAD\"], { cwd });\n const ref = result.stdout.trim();\n if (ref.length > 0) {\n return ref;\n }\n } catch {\n // fall through to rev-parse\n }\n\n try {\n const result = await execFileAsync(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"origin/HEAD\"], { cwd });\n const abbrevRef = result.stdout.trim();\n if (abbrevRef.length > 0 && abbrevRef !== \"origin/HEAD\") {\n return abbrevRef;\n }\n } catch {\n throw wrapGitError(\"resolve origin default branch\");\n }\n\n throw new WorkspaceError(\"GIT_ERROR\", \"Could not resolve origin default branch\");\n }\n}\n\nexport function createDefaultGitRunner(): GitRunner {\n return new ProcessGitRunner();\n}\n", "/** Canonical regex (case-insensitive UUID segment). */\nexport const STORY_BRANCH_PATTERN = /^story\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:-.+)?$/i;\n\nconst GIT_SHA_PATTERN = /^[0-9a-f]{40}$/i;\n\nconst REF_PREFIX_PATTERN = /^(?:refs\\/heads\\/|origin\\/)+/;\n\n/**\n * Parses a branch name `story/{uuid}` or `story/{uuid}-slug` into a canonical lowercase work item id.\n */\nexport function parseStoryBranchWorkItemId(branchName: string): string | null {\n const match = STORY_BRANCH_PATTERN.exec(branchName.trim());\n if (!match) {\n return null;\n }\n\n return match[1].toLowerCase();\n}\n\n/**\n * Parses a git ref (`refs/heads/story/...`, `origin/story/...`, or bare branch name).\n */\nexport function parseStoryBranchRef(ref: string): string | null {\n const normalizedRef = ref.trim().replace(REF_PREFIX_PATTERN, \"\");\n return parseStoryBranchWorkItemId(normalizedRef);\n}\n\n/** Returns true when `sha` is a full 40-character hexadecimal git commit id. */\nexport function isValidGitSha(sha: string): boolean {\n return GIT_SHA_PATTERN.test(sha.trim());\n}\n", "/** Matches `work-item:{uuid}`; UUID segment is case-insensitive. */\nconst WORK_ITEM_COMMIT_TAG_PATTERN = /work-item:\\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi;\n\n/**\n * Formats a canonical work-item tag for git commit messages.\n */\nexport function formatWorkItemCommitTag(workItemId: string): string {\n return `work-item:${workItemId.trim().toLowerCase()}`;\n}\n\n/**\n * Parses all distinct work-item ids from a commit message (subject + body).\n * Returns canonical lowercase UUIDs in first-seen order.\n */\nexport function parseWorkItemIdsFromCommitMessage(message: string): string[] {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n for (const match of message.matchAll(WORK_ITEM_COMMIT_TAG_PATTERN)) {\n const id = match[1].toLowerCase();\n if (!seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n\n return ids;\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\nimport { syncProjectSubagents } from \"../subagents/sync-project-subagents.js\";\nimport { resolveWorkspaceRoot } from \"../workspace/resolve-workspace-root.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nexport function registerSyncProjectSubagentsTools(\n server: McpServer,\n client: RestClient,\n config: McpServerConfig\n): void {\n server.registerTool(\n \"sync_project_subagents\",\n {\n description:\n \"Sync project custom subagent definitions from the API to {workspaceRoot}/.cursor/agents/{slug}.md so the IDE Task tool can resolve custom slugs. Idempotent overwrite. Requires MCP API token with write scope.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n workspaceRoot: z\n .string()\n .optional()\n .describe(\"Optional absolute path to workspace root; defaults to WORKSPACE_ROOT or upward search from cwd\")\n }\n },\n async ({ projectId, workspaceRoot }) =>\n runTool(async () => {\n const resolvedWorkspaceRoot = resolveWorkspaceRoot(workspaceRoot, config.workspaceRoot);\n return syncProjectSubagents(client, {\n projectId,\n workspaceRoot: resolvedWorkspaceRoot\n });\n })\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { SUBAGENT_ROLE } from \"@task-boards/api/enums/subagent-role.enum\";\nimport { PRIORITY } from \"@task-boards/api/enums/priority.enum\";\nimport { WORK_ITEM_TYPE } from \"@task-boards/api/enums/work-item-type.enum\";\nimport { WORK_ITEMS_ROUTES } from \"@task-boards/api/work-items/work-items.api\";\nimport {\n WORK_ITEMS_SEARCH_MAX_QUERY_LENGTH,\n WORK_ITEMS_SEARCH_MIN_QUERY_LENGTH\n} from \"@task-boards/api/work-items/work-items.consts\";\nimport type {\n CreateWorkItemRequest,\n DeleteWorkItemPreviewResponse,\n DeleteWorkItemRequest,\n MoveWorkItemRequest,\n UpdateWorkItemRequest,\n WorkItemListResponse,\n WorkItemResponse\n} from \"@task-boards/api/work-items/work-items.types\";\nimport { z } from \"zod\";\n\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { runTool } from \"./tool-utils.js\";\n\nconst workItemTypeValues = Object.values(WORK_ITEM_TYPE) as [string, ...string[]];\nconst priorityValues = Object.values(PRIORITY) as [string, ...string[]];\nconst subagentRoleValues = Object.values(SUBAGENT_ROLE) as [string, ...string[]];\n\nexport async function searchWorkItems(\n client: RestClient,\n projectId: string,\n query: string\n): Promise<WorkItemListResponse> {\n const q = query.trim();\n return client.get<WorkItemListResponse>(WORK_ITEMS_ROUTES.listWorkItems(projectId), { q });\n}\n\nexport async function getWorkItemDeletePreview(\n client: RestClient,\n workItemId: string\n): Promise<DeleteWorkItemPreviewResponse> {\n return client.get<DeleteWorkItemPreviewResponse>(WORK_ITEMS_ROUTES.getDeletePreview(workItemId));\n}\n\nexport async function deleteWorkItem(client: RestClient, workItemId: string): Promise<void> {\n const body: DeleteWorkItemRequest = { confirmCascade: false };\n await client.delete(WORK_ITEMS_ROUTES.deleteWorkItem(workItemId), body);\n}\n\nexport function registerWorkItemTools(server: McpServer, client: RestClient): void {\n server.registerTool(\n \"list_work_items\",\n {\n description: \"List work items for a project.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n type: z.enum(workItemTypeValues).optional().describe(\"Filter by work item type\"),\n columnId: z.string().uuid().optional().describe(\"Filter by board column id\"),\n parentId: z.string().uuid().nullable().optional().describe(\"Filter by parent work item id\")\n }\n },\n async ({ projectId, type, columnId, parentId }) =>\n runTool(async () => {\n const params: Record<string, string | undefined> = {};\n if (type !== undefined) {\n params.type = type;\n }\n if (columnId !== undefined) {\n params.columnId = columnId;\n }\n if (parentId !== undefined && parentId !== null) {\n params.parentId = parentId;\n }\n return client.get<WorkItemListResponse>(WORK_ITEMS_ROUTES.listWorkItems(projectId), params);\n })\n );\n\n server.registerTool(\n \"search_work_items\",\n {\n description: \"Search work items by query string (title, description, acceptance criteria, display key).\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n query: z\n .string()\n .min(WORK_ITEMS_SEARCH_MIN_QUERY_LENGTH)\n .max(WORK_ITEMS_SEARCH_MAX_QUERY_LENGTH)\n .describe(\"Search query\")\n }\n },\n async ({ projectId, query }) => runTool(async () => searchWorkItems(client, projectId, query))\n );\n\n server.registerTool(\n \"get_work_item\",\n {\n description: \"Get a work item by id.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) =>\n runTool(async () => client.get<WorkItemResponse>(WORK_ITEMS_ROUTES.getWorkItem(workItemId)))\n );\n\n server.registerTool(\n \"create_work_item\",\n {\n description:\n \"Create a work item under a project. MCP/automation attributes creator and default assignee to the \u00AB\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\u00BB service user (UserKind.SERVICE) unless assigneeUserId is set. The AI orchestrator processes STORY items only when assignee is that service user. Priority defaults to LOW when omitted.\",\n inputSchema: {\n projectId: z.string().uuid().describe(\"Project UUID\"),\n type: z.enum(workItemTypeValues).describe(\"Work item type\"),\n title: z.string().min(1).max(512).describe(\"Work item title\"),\n parentId: z.string().uuid().nullable().optional().describe(\"Parent work item id\"),\n description: z.string().nullable().optional().describe(\"Work item description\"),\n acceptanceCriteria: z.string().nullable().optional().describe(\"Acceptance criteria\"),\n priority: z\n .enum(priorityValues)\n .nullable()\n .optional()\n .describe(\"Work item priority; defaults to LOW when omitted or null\"),\n storyPoints: z\n .number()\n .int()\n .min(0)\n .max(999)\n .nullable()\n .optional()\n .describe(\"Story points (EPIC/STORY only). Required when project estimationRequired and mode is storyPoints\"),\n estimate: z\n .string()\n .nullable()\n .optional()\n .describe(\n \"Estimate in hours as decimal string (EPIC/STORY only). Required when estimationRequired and mode is estimate\"\n ),\n assigneeUserId: z\n .string()\n .uuid()\n .nullable()\n .optional()\n .describe(\n \"Project member user id; defaults to creator (human) or \u00AB\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\u00BB service user (MCP) when omitted\"\n ),\n labelIds: z\n .array(z.string().uuid())\n .max(10)\n .optional()\n .describe(\"Up to 10 project label ids to attach on create\")\n }\n },\n async ({\n projectId,\n type,\n title,\n parentId,\n description,\n acceptanceCriteria,\n priority,\n storyPoints,\n estimate,\n assigneeUserId,\n labelIds\n }) =>\n runTool(async () => {\n const body: CreateWorkItemRequest = {\n type: type as CreateWorkItemRequest[\"type\"],\n title,\n parentId,\n description,\n acceptanceCriteria,\n priority: priority as CreateWorkItemRequest[\"priority\"],\n storyPoints,\n estimate,\n assigneeUserId,\n labelIds\n };\n return client.post<WorkItemResponse>(WORK_ITEMS_ROUTES.createWorkItem(projectId), body);\n })\n );\n\n server.registerTool(\n \"update_work_item\",\n {\n description: \"Update work item fields (fetches current version first).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n title: z.string().min(1).max(512).optional().describe(\"Updated title\"),\n description: z.string().nullable().optional().describe(\"Updated description\"),\n acceptanceCriteria: z.string().nullable().optional().describe(\"Updated acceptance criteria\"),\n priority: z.enum(priorityValues).nullable().optional().describe(\"Updated priority\"),\n assignedAgentRole: z.enum(subagentRoleValues).nullable().optional().describe(\"Assigned subagent role\"),\n parentId: z.string().uuid().nullable().optional().describe(\"Parent work item id (Epic for Story)\"),\n storyPoints: z.number().int().min(0).max(999).nullable().optional().describe(\"Story points (EPIC/STORY only)\"),\n estimate: z.string().nullable().optional().describe(\"Estimate in hours as decimal string (EPIC/STORY only)\"),\n assigneeUserId: z\n .string()\n .uuid()\n .nullable()\n .optional()\n .describe(\n \"Project member user id assignee; set to \u00AB\u0410\u0433\u0435\u043D\u0442 \u0418\u0418\u00BB (SERVICE user) for AI orchestrator to process the STORY. Changing assignee from SERVICE to a human cancels pending agent runs for that work item.\"\n ),\n codeChangesRequired: z\n .boolean()\n .optional()\n .describe(\"STORY only: when false, ANALYST may complete with SKIP_DEV to release without code/git\"),\n labelIds: z.array(z.string().uuid()).max(10).optional().describe(\"Replace work item labels (up to 10)\")\n }\n },\n async ({\n workItemId,\n title,\n description,\n acceptanceCriteria,\n priority,\n assignedAgentRole,\n parentId,\n storyPoints,\n estimate,\n assigneeUserId,\n codeChangesRequired,\n labelIds\n }) =>\n runTool(async () => {\n const current = await client.get<WorkItemResponse>(WORK_ITEMS_ROUTES.getWorkItem(workItemId));\n const body: UpdateWorkItemRequest = {\n title,\n description,\n acceptanceCriteria,\n priority: priority as UpdateWorkItemRequest[\"priority\"],\n assignedAgentRole: assignedAgentRole as UpdateWorkItemRequest[\"assignedAgentRole\"],\n parentId,\n storyPoints,\n estimate,\n assigneeUserId,\n codeChangesRequired,\n labelIds,\n version: current.version\n };\n return client.patch<WorkItemResponse>(WORK_ITEMS_ROUTES.updateWorkItem(workItemId), body);\n })\n );\n\n server.registerTool(\n \"move_work_item\",\n {\n description: \"Move a work item to another board column (fetches current version first).\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\"),\n columnId: z.string().uuid().describe(\"Target column UUID\")\n }\n },\n async ({ workItemId, columnId }) =>\n runTool(async () => {\n const current = await client.get<WorkItemResponse>(WORK_ITEMS_ROUTES.getWorkItem(workItemId));\n const body: MoveWorkItemRequest = {\n columnId,\n version: current.version\n };\n return client.post<WorkItemResponse>(WORK_ITEMS_ROUTES.moveWorkItem(workItemId), body);\n })\n );\n\n server.registerTool(\n \"get_work_item_delete_preview\",\n {\n description:\n \"Preview hard-delete impact for a work item (cascade counts and eligibility). MCP may delete SUBTASK items only.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) => runTool(async () => getWorkItemDeletePreview(client, workItemId))\n );\n\n server.registerTool(\n \"delete_work_item\",\n {\n description:\n \"Hard-delete a SUBTASK work item (leaf delete with confirmCascade false). EPIC/STORY deletes are human-only.\",\n inputSchema: {\n workItemId: z.string().uuid().describe(\"Work item UUID\")\n }\n },\n async ({ workItemId }) =>\n runTool(async () => {\n await deleteWorkItem(client, workItemId);\n return { workItemId, deleted: true };\n })\n );\n}\n", "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nimport type { McpServerConfig } from \"../config.js\";\nimport type { RestClient } from \"../rest-client.js\";\n\nimport { registerAgentRunTools } from \"./agent-runs.js\";\nimport { registerOrchestratorTools } from \"./orchestrator.js\";\nimport { registerAttachmentTools } from \"./attachments.js\";\nimport { registerBoardTools } from \"./board.js\";\nimport { registerCommentTools } from \"./comments.js\";\nimport { registerLabelTools } from \"./labels.js\";\nimport { registerProjectTools } from \"./projects.js\";\nimport { registerResolveProjectTools } from \"./resolve-project.js\";\nimport { registerSyncGitReleasesTools } from \"./sync-git-releases.js\";\nimport { registerSyncProjectSubagentsTools } from \"./sync-project-subagents.js\";\nimport { registerWorkItemTools } from \"./work-items.js\";\n\nexport function registerTools(server: McpServer, client: RestClient, config: McpServerConfig): void {\n registerProjectTools(server, client);\n registerResolveProjectTools(server, client, config);\n registerWorkItemTools(server, client);\n registerCommentTools(server, client);\n registerLabelTools(server, client);\n registerAttachmentTools(server, client, config);\n registerBoardTools(server, client);\n registerAgentRunTools(server, client, config);\n registerOrchestratorTools(server, client, config);\n registerSyncGitReleasesTools(server, client, config);\n registerSyncProjectSubagentsTools(server, client, config);\n}\n", "#!/usr/bin/env node\nimport { isAttentionCliInvocation, runAttentionCli } from \"./attention/attention-cli.js\";\nimport { loadConfig } from \"./config.js\";\nimport { RestClient } from \"./rest-client.js\";\n\nimport { main as startMcpServer } from \"./index.js\";\n\nasync function main(): Promise<void> {\n const argv = process.argv.slice(2);\n\n if (isAttentionCliInvocation(argv)) {\n const config = loadConfig();\n const client = new RestClient(config.apiUrl, config.apiToken);\n const exitCode = await runAttentionCli(argv, { config, client });\n process.exit(exitCode);\n }\n\n await startMcpServer();\n}\n\nmain().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : \"Failed to start MCP server\";\n console.error(message);\n process.exit(1);\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["SubscriptionTier", "SystemRole", "ProjectMemberRole", "StaffCapability", "StaffRole", "UserKind", "SubscriptionSource", "SubscriptionAuditAction", "isValidGitSha", "GIT_SHA_PATTERN", "parseWorkItemIdsFromCommitMessage", "WORK_ITEM_COMMIT_TAG_PATTERN", "slug", "transition", "MAX_SUBAGENT_SLUG_LENGTH", "buildSubagentFileContentFromBody", "isBlockedMcpAttachmentFileName", "sanitizeMcpErrorMessage", "sanitizeMcpToolResult", "import_agent_runs", "import_shared", "import_shared", "existsSync", "basename", "resolve", "resolve", "basename", "existsSync", "statSync", "dirname", "isAbsolute", "relative", "resolve", "resolve", "existsSync", "statSync", "relative", "isAbsolute", "dirname", "import_shared", "existsSync", "z", "z", "import_shared", "join", "resolve", "remainingMs", "existsSync", "mkdirSync", "readFileSync", "writeFileSync", "join", "existsSync", "readFileSync", "join", "TASK_BOARDS_FILE", "import_agent_run_status", "isRecord", "resolve", "import_agent_runs", "import_agent_run_status", "z", "import_agent_run_status", "z", "z", "basename", "existsSync", "readFileSync", "join", "basename", "z", "z", "z", "z", "z", "import_subagent_role", "import_projects", "z", "z", "z", "z", "z", "z", "z", "z", "import_subagent_role", "import_work_items", "z", "subagentRoleValues", "z", "require", "main"]
7
7
  }