@opvs-ai/mcp 0.5.2 → 0.5.4

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.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Agent handler — optimization commands, mention, tasks-by
3
+ */
4
+ import { type ToolDef, type ToolResult, type CallApiFn, type BuildUrlFn } from "./types.js";
5
+ export declare const TOOLS: ToolDef[];
6
+ export declare function handleTool(name: string, args: Record<string, unknown>, callApi: CallApiFn, buildUrl: BuildUrlFn): Promise<ToolResult | null>;
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Agent handler — optimization commands, mention, tasks-by
3
+ */
4
+ import { ok, WORKSPACE_PROP, resolveWorkspace, getFormat } from "./types.js";
5
+ export const TOOLS = [
6
+ { name: "agent_my_tasks", description: "Get tasks assigned to you across ALL boards in one call. More comprehensive than list_tasks with self=true — aggregates from every board and includes board names.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Scope to a specific board (optional)" }, status: { type: "string", description: "Filter: pending, assigned, in_progress, review, done, failed" }, limit: { type: "number", description: "Max results" }, ...WORKSPACE_PROP } } },
7
+ { name: "agent_my_delegations", description: "List tasks you delegated to other agents. Complement to agent_my_tasks — shows tasks you handed off, not tasks assigned to you.", inputSchema: { type: "object", properties: { status: { type: "string", description: "Filter: pending, assigned, in_progress, review, done, failed" }, limit: { type: "number", description: "Max results" }, ...WORKSPACE_PROP } } },
8
+ { name: "agent_batch_create_tasks", description: "Create multiple tasks at once. Each task needs board_id and title. Returns list of created IDs and any errors.", inputSchema: { type: "object", properties: { tasks: { type: "array", items: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, title: { type: "string", description: "Task title" }, description: { type: "string", description: "Task description" }, priority: { type: "string", description: "low, medium, high, critical" }, column_id: { type: "string", description: "Column UUID or name" }, agent_instructions: { type: "string", description: "Agent instructions" } }, required: ["board_id", "title"] }, description: "Array of task objects to create" }, ...WORKSPACE_PROP }, required: ["tasks"] } },
9
+ { name: "agent_report_progress", description: "Report progress on a task. Updates metadata and adds a progress comment. Use this for long-running tasks to keep stakeholders informed.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, percent: { type: "number", description: "Progress percentage (0-100)" }, message: { type: "string", description: "Progress message" }, current_operation: { type: "string", description: "What you're currently doing" }, ...WORKSPACE_PROP }, required: ["task_id", "percent"] } },
10
+ { name: "agent_complete_task", description: "Mark a task as done or failed. Automatically walks through intermediate status transitions (pending->assigned->in_progress->done). Adds a completion comment.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, status: { type: "string", description: "done or failed (default: done)" }, summary: { type: "string", description: "Completion summary (added as comment)" }, result_data: { type: "object", description: "Structured result data (JSON object)" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
11
+ { name: "agent_delegate_task", description: "Reassign a task to another agent by their slug (e.g. 'maya', 'grant'). Resolves the slug to a UUID, updates assignment, and adds a delegation comment.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, agent_slug: { type: "string", description: "Target agent's slug (e.g. 'maya')" }, instructions: { type: "string", description: "Instructions for the target agent" }, ...WORKSPACE_PROP }, required: ["task_id", "agent_slug"] } },
12
+ { name: "search_tasks", description: "Full-text search across all tasks/cards. Searches titles, descriptions, and comments.", inputSchema: { type: "object", properties: { query: { type: "string", description: "Search query" }, board_id: { type: "string", description: "Scope to a specific board (optional)" }, limit: { type: "number", description: "Max results (default 25)" }, ...WORKSPACE_PROP }, required: ["query"] } },
13
+ { name: "batch_get_tasks", description: "Get multiple tasks by IDs in one call (max 50). More efficient than calling get_task multiple times.", inputSchema: { type: "object", properties: { ids: { type: "array", items: { type: "string" }, description: "Array of task UUIDs (max 50)" }, ...WORKSPACE_PROP }, required: ["ids"] } },
14
+ { name: "agent_mention", description: "@mention an agent on a task to trigger them to respond. The agent receives a notification with the task context.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, agent_slug: { type: "string", description: "Agent slug to mention" }, message: { type: "string", description: "Message for the agent" }, ...WORKSPACE_PROP }, required: ["task_id", "agent_slug"] } },
15
+ { name: "agent_tasks_by", description: "List tasks assigned to a specific agent by their slug.", inputSchema: { type: "object", properties: { agent_slug: { type: "string", description: "Agent slug" }, status: { type: "string", description: "Filter by status" }, limit: { type: "number", description: "Max results" }, ...WORKSPACE_PROP }, required: ["agent_slug"] } },
16
+ ];
17
+ export async function handleTool(name, args, callApi, buildUrl) {
18
+ const fmt = getFormat();
19
+ const ws = resolveWorkspace(args);
20
+ switch (name) {
21
+ case "agent_my_tasks": {
22
+ const params = {};
23
+ if (args.board_id)
24
+ params.board_id = String(args.board_id);
25
+ if (args.status)
26
+ params.status = String(args.status);
27
+ if (args.limit)
28
+ params.limit = String(args.limit);
29
+ return ok(await callApi("GET", buildUrl("/api/v1/board/agent-api/my-tasks", params, fmt), ws));
30
+ }
31
+ case "agent_my_delegations": {
32
+ const params = {};
33
+ if (args.status)
34
+ params.status = String(args.status);
35
+ if (args.limit)
36
+ params.limit = String(args.limit);
37
+ return ok(await callApi("GET", buildUrl("/api/v1/board/agent-api/my-delegations", params, fmt), ws));
38
+ }
39
+ case "agent_batch_create_tasks": return ok(await callApi("POST", "/api/v1/board/agent-api/tasks/batch", ws, { tasks: args.tasks }));
40
+ case "agent_report_progress": {
41
+ const body = { percent: args.percent };
42
+ if (args.message)
43
+ body.message = args.message;
44
+ if (args.current_operation)
45
+ body.current_operation = args.current_operation;
46
+ return ok(await callApi("POST", `/api/v1/board/agent-api/tasks/${args.task_id}/progress`, ws, body));
47
+ }
48
+ case "agent_complete_task": {
49
+ const body = {};
50
+ if (args.status)
51
+ body.status = args.status;
52
+ if (args.summary)
53
+ body.summary = args.summary;
54
+ if (args.result_data)
55
+ body.result_data = args.result_data;
56
+ return ok(await callApi("POST", `/api/v1/board/agent-api/tasks/${args.task_id}/complete`, ws, body));
57
+ }
58
+ case "agent_delegate_task": {
59
+ const body = { agent_slug: args.agent_slug };
60
+ if (args.instructions)
61
+ body.instructions = args.instructions;
62
+ return ok(await callApi("POST", `/api/v1/board/agent-api/tasks/${args.task_id}/delegate`, ws, body));
63
+ }
64
+ case "search_tasks": {
65
+ const params = { q: String(args.query) };
66
+ if (args.board_id)
67
+ params.board_id = String(args.board_id);
68
+ if (args.limit)
69
+ params.limit = String(args.limit);
70
+ return ok(await callApi("GET", buildUrl("/api/v1/board/cards/search", params, fmt), ws));
71
+ }
72
+ case "batch_get_tasks": {
73
+ const ids = args.ids.join(",");
74
+ return ok(await callApi("GET", buildUrl("/api/v1/board/tasks/batch", { ids }, fmt), ws));
75
+ }
76
+ case "agent_mention": {
77
+ const body = { agent_slug: args.agent_slug };
78
+ if (args.message)
79
+ body.message = args.message;
80
+ return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/agent-mention`, ws, body));
81
+ }
82
+ case "agent_tasks_by": {
83
+ const params = {};
84
+ if (args.status)
85
+ params.status = String(args.status);
86
+ if (args.limit)
87
+ params.limit = String(args.limit);
88
+ return ok(await callApi("GET", buildUrl(`/api/v1/board/agents/${args.agent_slug}/tasks`, params, fmt), ws));
89
+ }
90
+ default: return null;
91
+ }
92
+ }
93
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/handlers/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Auth handler — workspace listing, auth status, access request/check
3
+ */
4
+ import { type ToolDef, type ToolResult, type CallApiFn } from "./types.js";
5
+ export declare const TOOLS: ToolDef[];
6
+ export declare function handleTool(name: string, args: Record<string, unknown>, callApi: CallApiFn): Promise<ToolResult | null>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Auth handler — workspace listing, auth status, access request/check
3
+ */
4
+ import { listWorkspaces, apiUnauthPost, apiUnauthGet, saveWorkspace, setCurrentWorkspace, DEFAULT_WORKSPACE, } from "@opvs-ai/core";
5
+ import { ok, err, WORKSPACE_PROP, resolveWorkspace } from "./types.js";
6
+ export const TOOLS = [
7
+ { name: "list_workspaces", description: "List all configured workspaces with their brand names and API URLs. Call this first if you're unsure which workspace to use.", inputSchema: { type: "object", properties: {} } },
8
+ { name: "get_auth_status", description: "Check who you are authenticated as — returns your user ID, email, brand, and permission scopes. Useful to verify access before other operations.", inputSchema: { type: "object", properties: { ...WORKSPACE_PROP } } },
9
+ { name: "request_access", description: "Request access to OPVS workspaces by admin email. Sends an approval email to the admin. After the admin clicks approve, use check_access_status to complete authentication. Returns a request_id and poll_token needed for check_access_status.", inputSchema: { type: "object", properties: { email: { type: "string", description: "Admin email address (the person who will approve access)" }, api_url: { type: "string", description: "API URL (default: https://app.opvs.ai)" }, project: { type: "string", description: "Project name (shown in approval email)" } }, required: ["email"] } },
10
+ { name: "check_access_status", description: "Check the status of an access request. Call this after request_access to see if the admin has approved. Returns 'pending' (keep checking), 'active' (success — workspaces are now configured), 'denied', or 'expired'.", inputSchema: { type: "object", properties: { request_id: { type: "string", description: "The request_id from request_access" }, poll_token: { type: "string", description: "The poll_token from request_access" }, api_url: { type: "string", description: "API URL (must match the one used in request_access)" } }, required: ["request_id", "poll_token"] } },
11
+ ];
12
+ export async function handleTool(name, args, callApi) {
13
+ const ws = resolveWorkspace(args);
14
+ switch (name) {
15
+ case "list_workspaces": {
16
+ const workspaces = listWorkspaces();
17
+ if (workspaces.length === 0)
18
+ return ok("No workspaces configured. Run `opvs auth request -w <slug> -e <email>` to add one.");
19
+ const lines = workspaces.map((w) => {
20
+ const marker = w.isCurrent ? " (current)" : "";
21
+ return `- ${w.slug}: ${w.brand_name || "(no brand)"}${marker}\n api_url: ${w.api_url}`;
22
+ });
23
+ return ok(`workspaces:\n${lines.join("\n")}\n`);
24
+ }
25
+ case "get_auth_status": return ok(await callApi("GET", "/api/v1/auth/me", ws));
26
+ case "request_access": {
27
+ const baseUrl = args.api_url || DEFAULT_WORKSPACE.api_url;
28
+ try {
29
+ const res = await apiUnauthPost(baseUrl, "/api/v1/auth/pat/request-by-email", {
30
+ owner_email: args.email,
31
+ project_name: args.project || null,
32
+ requested_scopes: ["board:read", "board:write"],
33
+ ttl_hours: 72,
34
+ fingerprint: { agent_type: "Claude Desktop (MCP)", hostname: "mcp-server" },
35
+ });
36
+ const data = await res.json();
37
+ const brandCount = data.brands?.length ?? 0;
38
+ const brandList = data.brands?.map(b => b.brand_name).join(", ") || "unknown";
39
+ return ok(`Approval email sent to ${args.email}.\n` +
40
+ `Found ${brandCount} workspace${brandCount !== 1 ? "s" : ""}: ${brandList}\n\n` +
41
+ `Save these for check_access_status:\n` +
42
+ ` request_id: ${data.request_id}\n` +
43
+ ` poll_token: ${data.poll_token}\n` +
44
+ ` api_url: ${baseUrl}\n\n` +
45
+ `Ask the admin to check their email and click "Approve Access". ` +
46
+ `Then call check_access_status with the request_id and poll_token above.`);
47
+ }
48
+ catch (e) {
49
+ const error = e;
50
+ return err(error.detail || error.message || "Failed to request access");
51
+ }
52
+ }
53
+ case "check_access_status": {
54
+ const baseUrl = args.api_url || DEFAULT_WORKSPACE.api_url;
55
+ try {
56
+ const res = await apiUnauthGet(baseUrl, `/api/v1/auth/pat/request/${args.request_id}/status`, String(args.poll_token));
57
+ const data = await res.json();
58
+ if (data.status === "pending")
59
+ return ok("Status: pending — the admin has not yet approved. Try again in a few seconds.");
60
+ if (data.status === "denied")
61
+ return ok("Status: denied — the admin rejected the access request.");
62
+ if (data.status === "expired")
63
+ return ok("Status: expired — the request timed out. Use request_access to try again.");
64
+ if (data.status === "active") {
65
+ if (data.workspaces?.length) {
66
+ for (const wsItem of data.workspaces) {
67
+ saveWorkspace(wsItem.brand_slug, { api_url: baseUrl, token: wsItem.token, brand_id: wsItem.brand_id, brand_name: wsItem.brand_name });
68
+ }
69
+ setCurrentWorkspace(data.workspaces[0].brand_slug);
70
+ const slugs = data.workspaces.map(wsItem => wsItem.brand_slug).join(", ");
71
+ return ok(`Status: active — access granted!\n${data.workspaces.length} workspace${data.workspaces.length !== 1 ? "s" : ""} configured: ${slugs}\nCurrent workspace: ${data.workspaces[0].brand_slug}\n\nYou can now use all OPVS tools. Use list_workspaces to see available workspaces.`);
72
+ }
73
+ else if (data.token) {
74
+ return ok(`Status: active — access granted!\nBrand: ${data.brand_name} (ID: ${data.brand_id})\nToken received. Configure your workspace to use it.`);
75
+ }
76
+ }
77
+ return ok(`Status: ${data.status}`);
78
+ }
79
+ catch (e) {
80
+ const error = e;
81
+ return err(error.detail || error.message || "Failed to check status");
82
+ }
83
+ }
84
+ default: return null;
85
+ }
86
+ }
87
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/handlers/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Board handler — boards, tasks, comments, columns, files, members, markers, board-links
3
+ */
4
+ import { type ToolDef, type ToolResult, type CallApiFn, type BuildUrlFn } from "./types.js";
5
+ export declare const TOOLS: ToolDef[];
6
+ export declare function handleTool(name: string, args: Record<string, unknown>, callApi: CallApiFn, buildUrl: BuildUrlFn): Promise<ToolResult | null>;
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Board handler — boards, tasks, comments, columns, files, members, markers, board-links
3
+ */
4
+ import { ok, err, WORKSPACE_PROP, resolveWorkspace, getFormat } from "./types.js";
5
+ export const TOOLS = [
6
+ // ── Boards ──
7
+ { name: "list_boards", description: "List all boards in your workspace. Returns board IDs, names, task counts, and column counts.", inputSchema: { type: "object", properties: { ...WORKSPACE_PROP } } },
8
+ { name: "get_board", description: "Get board details including all columns with their IDs and names. Use this to discover column IDs for move_task or create_task.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
9
+ { name: "create_board", description: "Create a new board. Default columns: Backlog, To Do, In Progress, Review, Done. Visibility: 'public' (default) or 'private'.", inputSchema: { type: "object", properties: { name: { type: "string", description: "Board name" }, description: { type: "string", description: "Board description" }, visibility: { type: "string", description: "public or private (default: public)" }, ...WORKSPACE_PROP }, required: ["name"] } },
10
+ { name: "update_board", description: "Update a board's name, description, or visibility. Provide only the fields you want to change.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, name: { type: "string", description: "New name" }, description: { type: "string", description: "New description" }, visibility: { type: "string", description: "public or private" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
11
+ { name: "delete_board", description: "Delete a board (soft delete — can be recovered by an admin).", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
12
+ // ── Tasks ──
13
+ { name: "list_tasks", description: "List tasks on a board or assigned to you. Use self=true to find your assigned work across all boards (recommended starting point). Filter by status (pending, assigned, in_progress, review, done, failed) or priority (low, medium, high, critical).", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID (required unless self=true)" }, self: { type: "boolean", description: "If true, list only tasks assigned to you across all boards" }, status: { type: "string", description: "Filter: pending, assigned, in_progress, review, done, failed" }, priority: { type: "string", description: "Filter: low, medium, high, critical" }, limit: { type: "number", description: "Max results (default 25)" }, ...WORKSPACE_PROP } } },
14
+ { name: "get_task", description: "Get full details of a single task including description, agent instructions, comments, assignees, labels, and metadata.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
15
+ { name: "create_task", description: "Create a new task on a board. Use assigned_to_agent_id='self' to assign to yourself. column_id accepts a UUID or column name (e.g. 'In Progress'). If column_id is omitted, the task goes to the first column. Priority: low, medium (default), high, critical.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, title: { type: "string", description: "Task title" }, description: { type: "string", description: "Task description (markdown). Supports full PRDs, plans, and specs — no length limit." }, priority: { type: "string", description: "low, medium, high, critical (default: medium)" }, column_id: { type: "string", description: "Column UUID or name (e.g. 'In Progress'). Defaults to first column." }, labels: { type: "array", items: { type: "string" }, description: "Task labels/tags" }, due_date: { type: "string", description: "Due date (YYYY-MM-DD)" }, agent_instructions: { type: "string", description: "Detailed instructions for the assigned agent" }, assigned_to_agent_id: { type: "string", description: "Agent UUID to assign to, or 'self' to assign to yourself" }, ...WORKSPACE_PROP }, required: ["board_id", "title"] } },
16
+ { name: "update_task", description: "Update a task's fields. Status flow: pending → assigned → in_progress → review → done (or failed). Use assigned_to_agent_id='self' to assign to yourself. Provide only the fields you want to change.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, status: { type: "string", description: "New status: pending, assigned, in_progress, review, done, failed" }, priority: { type: "string", description: "New priority: low, medium, high, critical" }, title: { type: "string", description: "New title" }, description: { type: "string", description: "New description (markdown)" }, result: { type: "string", description: "Agent result summary — set this when completing work" }, labels: { type: "array", items: { type: "string" }, description: "New labels (replaces existing)" }, due_date: { type: "string", description: "Due date (YYYY-MM-DD)" }, assigned_to_agent_id: { type: "string", description: "Agent UUID to assign to, or 'self' to assign to yourself" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
17
+ { name: "delete_task", description: "Delete a task (soft delete — can be recovered by an admin).", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
18
+ { name: "move_task", description: "Move a task to a different column. column_id accepts a UUID or column name (e.g. 'Done', 'In Progress'). Use get_board or list_columns to see available columns and their names.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, column_id: { type: "string", description: "Target column UUID or name (e.g. 'Done')" }, position: { type: "number", description: "Position within column (0 = top, optional)" }, ...WORKSPACE_PROP }, required: ["task_id", "column_id"] } },
19
+ { name: "list_subtasks", description: "List subtasks of a parent task. Returns child tasks with their status and priority.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Parent task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
20
+ // ── Comments ──
21
+ { name: "add_comment", description: "Add a comment to a task. Use for progress updates, notes, questions, or deliverables. Supports markdown formatting.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, content: { type: "string", description: "Comment text (markdown supported)" }, ...WORKSPACE_PROP }, required: ["task_id", "content"] } },
22
+ { name: "list_comments", description: "List comments on a task, ordered newest first. Returns comment content, author, and timestamps.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, limit: { type: "number", description: "Max results (default 25)" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
23
+ // ── Columns ──
24
+ { name: "list_columns", description: "List all columns on a board with their IDs, names, and positions. Use this to find column IDs needed by move_task and create_task (or just pass column names directly).", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
25
+ { name: "create_column", description: "Create a new column on a board. New column is added at the end. Use reorder_columns to change position.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, name: { type: "string", description: "Column name (e.g. 'In Review', 'Blocked')" }, color: { type: "string", description: "Column color hex (e.g. '#3B82F6')" }, wip_limit: { type: "number", description: "Max tasks allowed in this column" }, ...WORKSPACE_PROP }, required: ["board_id", "name"] } },
26
+ { name: "reorder_columns", description: "Set the order of columns on a board. Pass ALL column UUIDs in the desired order — any omitted columns will be removed.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, column_ids: { type: "array", items: { type: "string" }, description: "ALL column UUIDs in desired left-to-right order" }, ...WORKSPACE_PROP }, required: ["board_id", "column_ids"] } },
27
+ // ── Files ──
28
+ { name: "list_files", description: "List file attachments on a task. Returns file names, sizes, types, and IDs. Use get_file for download URLs.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
29
+ { name: "get_file", description: "Get file metadata including name, size, MIME type, and download URL. Note: file upload is only available via the CLI (opvs files upload).", inputSchema: { type: "object", properties: { file_id: { type: "string", description: "File UUID" }, ...WORKSPACE_PROP }, required: ["file_id"] } },
30
+ // ── Members ──
31
+ { name: "list_board_members", description: "List members of a board (users and agents with access).", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
32
+ { name: "add_board_member", description: "Add a user or agent as a member of a board.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, user_id: { type: "string", description: "User UUID to add" }, role: { type: "string", description: "Member role: member or admin (default: member)" }, ...WORKSPACE_PROP }, required: ["board_id", "user_id"] } },
33
+ { name: "remove_board_member", description: "Remove a member from a board.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, user_id: { type: "string", description: "User UUID to remove" }, ...WORKSPACE_PROP }, required: ["board_id", "user_id"] } },
34
+ // ── Markers ──
35
+ { name: "list_markers", description: "List all markers/tags in the workspace. Markers are color-coded labels that can be toggled on tasks.", inputSchema: { type: "object", properties: { ...WORKSPACE_PROP } } },
36
+ { name: "create_marker", description: "Create a new marker with a name, color, and optional icon.", inputSchema: { type: "object", properties: { name: { type: "string", description: "Marker name" }, color: { type: "string", description: "Color hex (e.g. '#ff0000')" }, icon: { type: "string", description: "Icon name" }, ...WORKSPACE_PROP }, required: ["name"] } },
37
+ { name: "update_marker", description: "Update a marker's name, color, or icon.", inputSchema: { type: "object", properties: { marker_id: { type: "string", description: "Marker UUID" }, name: { type: "string", description: "New name" }, color: { type: "string", description: "New color hex" }, icon: { type: "string", description: "New icon" }, ...WORKSPACE_PROP }, required: ["marker_id"] } },
38
+ { name: "delete_marker", description: "Delete a marker.", inputSchema: { type: "object", properties: { marker_id: { type: "string", description: "Marker UUID" }, ...WORKSPACE_PROP }, required: ["marker_id"] } },
39
+ { name: "toggle_marker", description: "Toggle a marker on/off for a task.", inputSchema: { type: "object", properties: { marker_id: { type: "string", description: "Marker UUID" }, task_id: { type: "string", description: "Task UUID to toggle marker on" }, ...WORKSPACE_PROP }, required: ["marker_id", "task_id"] } },
40
+ // ── Board Links ──
41
+ { name: "list_board_links", description: "List cross-board links (relationships between boards).", inputSchema: { type: "object", properties: { ...WORKSPACE_PROP } } },
42
+ { name: "create_board_link", description: "Create a link between two boards.", inputSchema: { type: "object", properties: { source_board_id: { type: "string", description: "Source board UUID" }, target_board_id: { type: "string", description: "Target board UUID" }, link_type: { type: "string", description: "Link type (default: related)" }, label: { type: "string", description: "Link label/description" }, ...WORKSPACE_PROP }, required: ["source_board_id", "target_board_id"] } },
43
+ { name: "update_board_link", description: "Update a board link's type or label.", inputSchema: { type: "object", properties: { link_id: { type: "string", description: "Link UUID" }, link_type: { type: "string", description: "New link type" }, label: { type: "string", description: "New label" }, ...WORKSPACE_PROP }, required: ["link_id"] } },
44
+ { name: "delete_board_link", description: "Delete a board link.", inputSchema: { type: "object", properties: { link_id: { type: "string", description: "Link UUID" }, ...WORKSPACE_PROP }, required: ["link_id"] } },
45
+ ];
46
+ export async function handleTool(name, args, callApi, buildUrl) {
47
+ const fmt = getFormat();
48
+ const ws = resolveWorkspace(args);
49
+ switch (name) {
50
+ // ── Boards ──
51
+ case "list_boards": return ok(await callApi("GET", buildUrl("/api/v1/board/boards", undefined, fmt), ws));
52
+ case "get_board": return ok(await callApi("GET", buildUrl(`/api/v1/board/boards/${args.board_id}`, undefined, fmt), ws));
53
+ case "create_board": {
54
+ const body = { name: args.name };
55
+ if (args.description)
56
+ body.description = args.description;
57
+ if (args.visibility)
58
+ body.visibility = args.visibility;
59
+ return ok(await callApi("POST", "/api/v1/board/boards", ws, body));
60
+ }
61
+ case "update_board": {
62
+ const body = {};
63
+ if (args.name)
64
+ body.name = args.name;
65
+ if (args.description)
66
+ body.description = args.description;
67
+ if (args.visibility)
68
+ body.visibility = args.visibility;
69
+ if (Object.keys(body).length === 0)
70
+ return err("Nothing to update. Provide name, description, or visibility.");
71
+ return ok(await callApi("PATCH", `/api/v1/board/boards/${args.board_id}`, ws, body));
72
+ }
73
+ case "delete_board": {
74
+ await callApi("DELETE", `/api/v1/board/boards/${args.board_id}`, ws);
75
+ return ok(`Deleted board ${args.board_id}`);
76
+ }
77
+ // ── Tasks ──
78
+ case "list_tasks": {
79
+ const params = {};
80
+ if (args.status)
81
+ params.status = String(args.status);
82
+ if (args.priority)
83
+ params.priority = String(args.priority);
84
+ if (args.limit)
85
+ params.limit = String(args.limit);
86
+ if (args.self)
87
+ return ok(await callApi("GET", buildUrl("/api/v1/board/agent-api/my-tasks", params, fmt), ws));
88
+ if (!args.board_id)
89
+ return err("Provide board_id or set self=true");
90
+ return ok(await callApi("GET", buildUrl(`/api/v1/board/boards/${args.board_id}/tasks`, params, fmt), ws));
91
+ }
92
+ case "get_task": return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}`, undefined, fmt), ws));
93
+ case "create_task": {
94
+ const body = { title: args.title };
95
+ if (args.description)
96
+ body.description = args.description;
97
+ if (args.priority)
98
+ body.priority = args.priority;
99
+ if (args.column_id)
100
+ body.column_id = args.column_id;
101
+ if (args.labels)
102
+ body.labels = args.labels;
103
+ if (args.due_date)
104
+ body.due_date = args.due_date;
105
+ if (args.agent_instructions)
106
+ body.agent_instructions = args.agent_instructions;
107
+ if (args.assigned_to_agent_id)
108
+ body.assigned_to_agent_id = args.assigned_to_agent_id;
109
+ return ok(await callApi("POST", `/api/v1/board/boards/${args.board_id}/tasks`, ws, body));
110
+ }
111
+ case "update_task": {
112
+ const body = {};
113
+ if (args.status)
114
+ body.status = args.status;
115
+ if (args.priority)
116
+ body.priority = args.priority;
117
+ if (args.title)
118
+ body.title = args.title;
119
+ if (args.description)
120
+ body.description = args.description;
121
+ if (args.result)
122
+ body.agent_result_summary = args.result;
123
+ if (args.labels)
124
+ body.labels = args.labels;
125
+ if (args.due_date)
126
+ body.due_date = args.due_date;
127
+ if (args.assigned_to_agent_id)
128
+ body.assigned_to_agent_id = args.assigned_to_agent_id;
129
+ if (Object.keys(body).length === 0)
130
+ return err("Nothing to update. Provide status, priority, title, description, result, labels, due_date, or assigned_to_agent_id.");
131
+ return ok(await callApi("PATCH", `/api/v1/board/tasks/${args.task_id}`, ws, body));
132
+ }
133
+ case "delete_task": {
134
+ await callApi("DELETE", `/api/v1/board/tasks/${args.task_id}`, ws);
135
+ return ok(`Deleted task ${args.task_id}`);
136
+ }
137
+ case "move_task": {
138
+ const body = { column_id: args.column_id };
139
+ if (args.position !== undefined)
140
+ body.position = args.position;
141
+ return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/move`, ws, body));
142
+ }
143
+ case "list_subtasks": return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}/subtasks`, undefined, fmt), ws));
144
+ // ── Comments ──
145
+ case "add_comment": return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/comments`, ws, { content: args.content }));
146
+ case "list_comments": {
147
+ const params = {};
148
+ if (args.limit)
149
+ params.limit = String(args.limit);
150
+ return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}/comments`, params, fmt), ws));
151
+ }
152
+ // ── Columns ──
153
+ case "list_columns": return ok(await callApi("GET", buildUrl(`/api/v1/board/boards/${args.board_id}/columns`, undefined, fmt), ws));
154
+ case "create_column": {
155
+ const body = { name: args.name };
156
+ if (args.color)
157
+ body.color = args.color;
158
+ if (args.wip_limit !== undefined)
159
+ body.wip_limit = args.wip_limit;
160
+ return ok(await callApi("POST", `/api/v1/board/boards/${args.board_id}/columns`, ws, body));
161
+ }
162
+ case "reorder_columns": return ok(await callApi("POST", `/api/v1/board/boards/${args.board_id}/columns/reorder`, ws, { column_ids: args.column_ids }));
163
+ // ── Files ──
164
+ case "list_files": return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}/files`, undefined, fmt), ws));
165
+ case "get_file": return ok(await callApi("GET", `/api/v1/board/files/${args.file_id}`, ws));
166
+ // ── Members ──
167
+ case "list_board_members": return ok(await callApi("GET", buildUrl(`/api/v1/board/boards/${args.board_id}/members`, undefined, fmt), ws));
168
+ case "add_board_member": {
169
+ const body = { user_id: args.user_id };
170
+ if (args.role)
171
+ body.role = args.role;
172
+ return ok(await callApi("POST", `/api/v1/board/boards/${args.board_id}/members`, ws, body));
173
+ }
174
+ case "remove_board_member": {
175
+ await callApi("DELETE", `/api/v1/board/boards/${args.board_id}/members/${args.user_id}`, ws);
176
+ return ok(`Removed member ${args.user_id} from board ${args.board_id}`);
177
+ }
178
+ // ── Markers ──
179
+ case "list_markers": return ok(await callApi("GET", buildUrl("/api/v1/board/markers", undefined, fmt), ws));
180
+ case "create_marker": {
181
+ const body = { name: args.name };
182
+ if (args.color)
183
+ body.color = args.color;
184
+ if (args.icon)
185
+ body.icon = args.icon;
186
+ return ok(await callApi("POST", "/api/v1/board/markers", ws, body));
187
+ }
188
+ case "update_marker": {
189
+ const body = {};
190
+ if (args.name)
191
+ body.name = args.name;
192
+ if (args.color)
193
+ body.color = args.color;
194
+ if (args.icon)
195
+ body.icon = args.icon;
196
+ if (Object.keys(body).length === 0)
197
+ return err("Nothing to update. Provide name, color, or icon.");
198
+ return ok(await callApi("PATCH", `/api/v1/board/markers/${args.marker_id}`, ws, body));
199
+ }
200
+ case "delete_marker": {
201
+ await callApi("DELETE", `/api/v1/board/markers/${args.marker_id}`, ws);
202
+ return ok(`Deleted marker ${args.marker_id}`);
203
+ }
204
+ case "toggle_marker": return ok(await callApi("POST", `/api/v1/board/markers/${args.marker_id}/toggle`, ws, { task_id: args.task_id }));
205
+ // ── Board Links ──
206
+ case "list_board_links": return ok(await callApi("GET", buildUrl("/api/v1/board/board-links", undefined, fmt), ws));
207
+ case "create_board_link": {
208
+ const body = { source_board_id: args.source_board_id, target_board_id: args.target_board_id };
209
+ if (args.link_type)
210
+ body.link_type = args.link_type;
211
+ if (args.label)
212
+ body.label = args.label;
213
+ return ok(await callApi("POST", "/api/v1/board/board-links", ws, body));
214
+ }
215
+ case "update_board_link": {
216
+ const body = {};
217
+ if (args.link_type)
218
+ body.link_type = args.link_type;
219
+ if (args.label)
220
+ body.label = args.label;
221
+ if (Object.keys(body).length === 0)
222
+ return err("Nothing to update. Provide link_type or label.");
223
+ return ok(await callApi("PATCH", `/api/v1/board/board-links/${args.link_id}`, ws, body));
224
+ }
225
+ case "delete_board_link": {
226
+ await callApi("DELETE", `/api/v1/board/board-links/${args.link_id}`, ws);
227
+ return ok(`Deleted board link ${args.link_id}`);
228
+ }
229
+ default: return null;
230
+ }
231
+ }
232
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/handlers/board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Docs handler — AgentDocs CRUD, projects, pages, revisions, media, bulk
3
+ */
4
+ import { type ToolDef, type ToolResult, type CallApiFn, type BuildUrlFn } from "./types.js";
5
+ export declare const TOOLS: ToolDef[];
6
+ export declare function handleTool(name: string, args: Record<string, unknown>, callApi: CallApiFn, buildUrl: BuildUrlFn): Promise<ToolResult | null>;