@opvs-ai/mcp 0.5.3 → 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,140 @@
1
+ /**
2
+ * Docs handler — AgentDocs CRUD, projects, pages, revisions, media, bulk
3
+ */
4
+ import { ok, err, WORKSPACE_PROP, resolveWorkspace, getFormat } from "./types.js";
5
+ export const TOOLS = [
6
+ { name: "list_docs", description: "List all AgentDocs documentation projects in your workspace. Returns project names, slugs, and page counts.", inputSchema: { type: "object", properties: { ...WORKSPACE_PROP } } },
7
+ { name: "get_doc", description: "Get a documentation page by project and slug. The project parameter accepts a slug (e.g. 'platform-core-docs') or UUID.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID (e.g. 'platform-core-docs')" }, slug: { type: "string", description: "Page slug" }, version: { type: "number", description: "Specific version number (optional, defaults to latest)" }, ...WORKSPACE_PROP }, required: ["project", "slug"] } },
8
+ { name: "create_doc", description: "Create a new documentation page in a project. Content supports full markdown. Each page has a unique slug within its project.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, title: { type: "string", description: "Page title" }, slug: { type: "string", description: "Page slug (URL-friendly, must be unique in project)" }, content: { type: "string", description: "Page content (markdown)" }, message: { type: "string", description: "Commit message (default: 'Created via MCP')" }, ...WORKSPACE_PROP }, required: ["project", "title", "slug"] } },
9
+ { name: "update_doc", description: "Update a documentation page's content. Creates a new version — previous versions are preserved and accessible by version number.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, slug: { type: "string", description: "Page slug" }, content: { type: "string", description: "New content (markdown)" }, title: { type: "string", description: "New title (optional)" }, message: { type: "string", description: "Commit message (default: 'Updated via MCP')" }, ...WORKSPACE_PROP }, required: ["project", "slug", "content"] } },
10
+ { name: "search_docs", description: "Full-text search across documentation. Searches page titles and content. Optionally scope to a single project.", inputSchema: { type: "object", properties: { query: { type: "string", description: "Search query (searches titles and content)" }, project: { type: "string", description: "Project slug or UUID to scope search (optional)" }, limit: { type: "number", description: "Max results (default 10)" }, ...WORKSPACE_PROP }, required: ["query"] } },
11
+ // ── Project CRUD ──
12
+ { name: "create_project", description: "Create a new documentation project. Returns the project with its ID and slug.", inputSchema: { type: "object", properties: { name: { type: "string", description: "Project name" }, description: { type: "string", description: "Project description" }, visibility: { type: "string", description: "public or private (default: public)" }, ...WORKSPACE_PROP }, required: ["name"] } },
13
+ { name: "update_project", description: "Update a documentation project's name, description, or visibility. Brand admin only.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, name: { type: "string", description: "New name" }, description: { type: "string", description: "New description" }, visibility: { type: "string", description: "public or private" }, ...WORKSPACE_PROP }, required: ["project"] } },
14
+ { name: "delete_project", description: "Soft-delete a documentation project. Brand admin only.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, ...WORKSPACE_PROP }, required: ["project"] } },
15
+ // ── Pages ──
16
+ { name: "list_pages", description: "List pages in a documentation project. Use view='tree' for nested structure with children.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, view: { type: "string", description: "flat or tree (default: flat)" }, limit: { type: "number", description: "Max results (default 100)" }, ...WORKSPACE_PROP }, required: ["project"] } },
17
+ { name: "move_page", description: "Move a page to a new path or change sort order within its folder. Does not create a revision.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, slug: { type: "string", description: "Page slug" }, path: { type: "string", description: "New tree path (e.g. '/guides')" }, sort_order: { type: "number", description: "New sort order within folder" }, ...WORKSPACE_PROP }, required: ["project", "slug"] } },
18
+ { name: "delete_page", description: "Soft-delete a documentation page.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, slug: { type: "string", description: "Page slug" }, ...WORKSPACE_PROP }, required: ["project", "slug"] } },
19
+ // ── Revisions ──
20
+ { name: "page_history", description: "Get revision history for a page. Returns all past versions with dates and authors.", inputSchema: { type: "object", properties: { page_id: { type: "string", description: "Page UUID" }, limit: { type: "number", description: "Max results (default 25)" }, ...WORKSPACE_PROP }, required: ["page_id"] } },
21
+ { name: "page_diff", description: "Compute unified diff between two revisions. Omit 'from' for parent comparison.", inputSchema: { type: "object", properties: { page_id: { type: "string", description: "Page UUID" }, from_rev: { type: "string", description: "From revision ID (optional)" }, to_rev: { type: "string", description: "To revision ID (optional)" }, ...WORKSPACE_PROP }, required: ["page_id"] } },
22
+ { name: "page_rollback", description: "Rollback a page to a previous revision. Non-destructive — creates a new revision with the old content.", inputSchema: { type: "object", properties: { page_id: { type: "string", description: "Page UUID" }, revision_id: { type: "string", description: "Target revision ID to restore" }, message: { type: "string", description: "Commit message (default: 'Rollback via MCP')" }, ...WORKSPACE_PROP }, required: ["page_id", "revision_id"] } },
23
+ // ── Media ──
24
+ { name: "list_media", description: "List media files in a documentation project. Returns filenames, sizes, URLs, and markdown embed snippets.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, limit: { type: "number", description: "Max results (default 25)" }, ...WORKSPACE_PROP }, required: ["project"] } },
25
+ // ── Bulk ──
26
+ { name: "bulk_create_pages", description: "Bulk create or update multiple pages at once. Used for multi-page writes. Each page needs title, slug, content_md, commit_message.", inputSchema: { type: "object", properties: { project: { type: "string", description: "Project slug or UUID" }, pages: { type: "array", items: { type: "object", properties: { title: { type: "string" }, slug: { type: "string" }, content_md: { type: "string" }, commit_message: { type: "string" }, path: { type: "string" } }, required: ["title", "slug", "content_md", "commit_message"] }, description: "Array of page objects" }, branch: { type: "string", description: "Target branch (default: main)" }, ...WORKSPACE_PROP }, required: ["project", "pages"] } },
27
+ ];
28
+ export async function handleTool(name, args, callApi, buildUrl) {
29
+ const fmt = getFormat();
30
+ const ws = resolveWorkspace(args);
31
+ switch (name) {
32
+ case "list_docs": return ok(await callApi("GET", buildUrl("/api/v1/docs/projects", undefined, fmt), ws));
33
+ case "get_doc": {
34
+ const params = {};
35
+ if (args.version)
36
+ params.version = String(args.version);
37
+ return ok(await callApi("GET", buildUrl(`/api/v1/docs/projects/${args.project}/pages/${args.slug}`, params, fmt), ws));
38
+ }
39
+ case "create_doc": {
40
+ const body = { title: String(args.title), slug: String(args.slug), commit_message: String(args.message || "Created via MCP") };
41
+ if (args.content)
42
+ body.content_md = String(args.content);
43
+ return ok(await callApi("POST", `/api/v1/docs/projects/${args.project}/pages`, ws, body));
44
+ }
45
+ case "update_doc": {
46
+ const body = { content_md: String(args.content), commit_message: String(args.message || "Updated via MCP") };
47
+ if (args.title)
48
+ body.title = String(args.title);
49
+ return ok(await callApi("PUT", `/api/v1/docs/projects/${args.project}/pages/${args.slug}`, ws, body));
50
+ }
51
+ case "search_docs": {
52
+ const params = { q: String(args.query) };
53
+ if (args.project)
54
+ params.project = String(args.project);
55
+ if (args.limit)
56
+ params.limit = String(args.limit);
57
+ return ok(await callApi("GET", buildUrl("/api/v1/docs/search", params, fmt), ws));
58
+ }
59
+ // ── Project CRUD ──
60
+ case "create_project": {
61
+ const body = { name: args.name };
62
+ if (args.description)
63
+ body.description = args.description;
64
+ if (args.visibility)
65
+ body.visibility = args.visibility;
66
+ return ok(await callApi("POST", "/api/v1/docs/projects", ws, body));
67
+ }
68
+ case "update_project": {
69
+ const body = {};
70
+ if (args.name)
71
+ body.name = args.name;
72
+ if (args.description)
73
+ body.description = args.description;
74
+ if (args.visibility)
75
+ body.visibility = args.visibility;
76
+ if (Object.keys(body).length === 0)
77
+ return err("Nothing to update. Provide name, description, or visibility.");
78
+ return ok(await callApi("PATCH", `/api/v1/docs/projects/${args.project}`, ws, body));
79
+ }
80
+ case "delete_project": {
81
+ await callApi("DELETE", `/api/v1/docs/projects/${args.project}`, ws);
82
+ return ok(`Deleted project ${args.project}`);
83
+ }
84
+ // ── Pages ──
85
+ case "list_pages": {
86
+ const params = {};
87
+ if (args.view)
88
+ params.view = String(args.view);
89
+ if (args.limit)
90
+ params.limit = String(args.limit);
91
+ return ok(await callApi("GET", buildUrl(`/api/v1/docs/projects/${args.project}/pages`, params, fmt), ws));
92
+ }
93
+ case "move_page": {
94
+ const body = {};
95
+ if (args.path)
96
+ body.path = args.path;
97
+ if (args.sort_order !== undefined)
98
+ body.sort_order = args.sort_order;
99
+ if (Object.keys(body).length === 0)
100
+ return err("Provide path or sort_order.");
101
+ return ok(await callApi("PATCH", `/api/v1/docs/projects/${args.project}/pages/${args.slug}/move`, ws, body));
102
+ }
103
+ case "delete_page": {
104
+ await callApi("DELETE", `/api/v1/docs/projects/${args.project}/pages/${args.slug}`, ws);
105
+ return ok(`Deleted page ${args.slug}`);
106
+ }
107
+ // ── Revisions ──
108
+ case "page_history": {
109
+ const params = {};
110
+ if (args.limit)
111
+ params.limit = String(args.limit);
112
+ return ok(await callApi("GET", buildUrl(`/api/v1/docs/pages/${args.page_id}/history`, params, fmt), ws));
113
+ }
114
+ case "page_diff": {
115
+ const params = {};
116
+ if (args.from_rev)
117
+ params.from = String(args.from_rev);
118
+ if (args.to_rev)
119
+ params.to = String(args.to_rev);
120
+ return ok(await callApi("GET", buildUrl(`/api/v1/docs/pages/${args.page_id}/diff`, params, fmt), ws));
121
+ }
122
+ case "page_rollback": return ok(await callApi("POST", `/api/v1/docs/pages/${args.page_id}/rollback`, ws, { revision_id: args.revision_id, commit_message: String(args.message || "Rollback via MCP") }));
123
+ // ── Media ──
124
+ case "list_media": {
125
+ const params = {};
126
+ if (args.limit)
127
+ params.limit = String(args.limit);
128
+ return ok(await callApi("GET", buildUrl(`/api/v1/docs/projects/${args.project}/media`, params, fmt), ws));
129
+ }
130
+ // ── Bulk ──
131
+ case "bulk_create_pages": {
132
+ const body = { pages: args.pages };
133
+ if (args.branch)
134
+ body.branch = args.branch;
135
+ return ok(await callApi("POST", `/api/v1/docs/projects/${args.project}/pages/bulk`, ws, body));
136
+ }
137
+ default: return null;
138
+ }
139
+ }
140
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/handlers/docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Stages handler — task stages (sequential steps) + task 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,66 @@
1
+ /**
2
+ * Stages handler — task stages (sequential steps) + task links
3
+ */
4
+ import { ok, err, WORKSPACE_PROP, resolveWorkspace, getFormat } from "./types.js";
5
+ export const TOOLS = [
6
+ // ── Stages ──
7
+ { name: "list_stages", description: "List stages (sequential in-card steps) for a task. Stages enable multi-agent handoff workflows within a single task.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
8
+ { name: "create_stage", description: "Create a stage on a task. The first stage auto-activates. Subsequent stages stay pending until the previous one is completed via handoff.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, title: { type: "string", description: "Stage title" }, description: { type: "string", description: "Stage description" }, assignee_agent_id: { type: "string", description: "Agent UUID to assign this stage to" }, agent_instructions: { type: "string", description: "Instructions for the agent handling this stage" }, position: { type: "number", description: "Position in stage order" }, ...WORKSPACE_PROP }, required: ["task_id", "title"] } },
9
+ { name: "update_stage", description: "Update a stage (pending or active only). Provide only the fields you want to change.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, stage_id: { type: "string", description: "Stage UUID" }, title: { type: "string", description: "New title" }, description: { type: "string", description: "New description" }, assignee_agent_id: { type: "string", description: "New agent assignment" }, agent_instructions: { type: "string", description: "New agent instructions" }, ...WORKSPACE_PROP }, required: ["task_id", "stage_id"] } },
10
+ { name: "complete_stage", description: "Complete a stage and hand off to the next one. Adds a handoff comment. If this is the last stage, the task can be completed.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, stage_id: { type: "string", description: "Stage UUID to complete" }, comment: { type: "string", description: "Handoff comment for the next stage's assignee" }, ...WORKSPACE_PROP }, required: ["task_id", "stage_id"] } },
11
+ { name: "reorder_stages", description: "Reorder pending stages on a task. Active and completed stages cannot be reordered.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, order: { type: "array", items: { type: "string" }, description: "Stage UUIDs in desired order" }, ...WORKSPACE_PROP }, required: ["task_id", "order"] } },
12
+ // ── Task Links ──
13
+ { name: "list_task_links", description: "List all links for a task (incoming and outgoing). Link types: spawned, blocked_by, related.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
14
+ { name: "create_task_link", description: "Create a link between two tasks. Types: 'spawned' (this task created the target), 'blocked_by' (this task is blocked by target), 'related' (general relation).", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Source task UUID" }, target_task_id: { type: "string", description: "Target task UUID" }, link_type: { type: "string", description: "spawned, blocked_by, or related (default: related)" }, ...WORKSPACE_PROP }, required: ["task_id", "target_task_id"] } },
15
+ { name: "delete_task_link", description: "Delete a task link by its ID.", inputSchema: { type: "object", properties: { link_id: { type: "string", description: "Link UUID" }, ...WORKSPACE_PROP }, required: ["link_id"] } },
16
+ ];
17
+ export async function handleTool(name, args, callApi, buildUrl) {
18
+ const fmt = getFormat();
19
+ const ws = resolveWorkspace(args);
20
+ switch (name) {
21
+ // ── Stages ──
22
+ case "list_stages": return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}/stages`, undefined, fmt), ws));
23
+ case "create_stage": {
24
+ const body = { title: args.title };
25
+ if (args.description)
26
+ body.description = args.description;
27
+ if (args.assignee_agent_id)
28
+ body.assignee_agent_id = args.assignee_agent_id;
29
+ if (args.agent_instructions)
30
+ body.agent_instructions = args.agent_instructions;
31
+ if (args.position !== undefined)
32
+ body.position = args.position;
33
+ return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/stages`, ws, body));
34
+ }
35
+ case "update_stage": {
36
+ const body = {};
37
+ if (args.title)
38
+ body.title = args.title;
39
+ if (args.description)
40
+ body.description = args.description;
41
+ if (args.assignee_agent_id)
42
+ body.assignee_agent_id = args.assignee_agent_id;
43
+ if (args.agent_instructions)
44
+ body.agent_instructions = args.agent_instructions;
45
+ if (Object.keys(body).length === 0)
46
+ return err("Nothing to update. Provide title, description, assignee_agent_id, or agent_instructions.");
47
+ return ok(await callApi("PATCH", `/api/v1/board/tasks/${args.task_id}/stages/${args.stage_id}`, ws, body));
48
+ }
49
+ case "complete_stage": {
50
+ const body = {};
51
+ if (args.comment)
52
+ body.comment = args.comment;
53
+ return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/stages/${args.stage_id}/handoff`, ws, body));
54
+ }
55
+ case "reorder_stages": return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/stages/reorder`, ws, { order: args.order }));
56
+ // ── Task Links ──
57
+ case "list_task_links": return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}/links`, undefined, fmt), ws));
58
+ case "create_task_link": return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/links`, ws, { target_task_id: args.target_task_id, link_type: args.link_type || "related" }));
59
+ case "delete_task_link": {
60
+ await callApi("DELETE", `/api/v1/board/task-links/${args.link_id}`, ws);
61
+ return ok(`Deleted link ${args.link_id}`);
62
+ }
63
+ default: return null;
64
+ }
65
+ }
66
+ //# sourceMappingURL=stages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stages.js","sourceRoot":"","sources":["../../src/handlers/stages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Shared types for MCP handler modules.
3
+ */
4
+ export type ToolResult = {
5
+ content: {
6
+ type: "text";
7
+ text: string;
8
+ }[];
9
+ isError?: true;
10
+ };
11
+ export type ToolDef = {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: "object";
16
+ properties: Record<string, unknown>;
17
+ required?: string[];
18
+ };
19
+ };
20
+ export type CallApiFn = (method: "GET" | "POST" | "PATCH" | "PUT" | "DELETE", path: string, wsSlug?: string, body?: unknown) => Promise<string>;
21
+ export type BuildUrlFn = typeof import("@opvs-ai/core").buildUrl;
22
+ export declare function ok(text: string): ToolResult;
23
+ export declare function err(msg: string): ToolResult;
24
+ export declare const WORKSPACE_PROP: {
25
+ workspace: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ };
30
+ export declare function resolveWorkspace(args: Record<string, unknown>): string | undefined;
31
+ export declare function getFormat(): string;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shared types for MCP handler modules.
3
+ */
4
+ export function ok(text) {
5
+ return { content: [{ type: "text", text }] };
6
+ }
7
+ export function err(msg) {
8
+ return {
9
+ content: [{ type: "text", text: `Error: ${msg}` }],
10
+ isError: true,
11
+ };
12
+ }
13
+ export const WORKSPACE_PROP = {
14
+ workspace: {
15
+ type: "string",
16
+ description: "Workspace slug to use. If omitted, uses the current workspace. Use list_workspaces to see available workspaces.",
17
+ },
18
+ };
19
+ export function resolveWorkspace(args) {
20
+ return args.workspace || process.env.OPVS_WORKSPACE || undefined;
21
+ }
22
+ export function getFormat() {
23
+ return "json";
24
+ }
25
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/handlers/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0BH,MAAM,UAAU,EAAE,CAAC,IAAY;IAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC;QAC3D,OAAO,EAAE,IAAa;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE;QACT,IAAI,EAAE,QAAQ;QACd,WAAW,EACT,iHAAiH;KACpH;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,IAA6B;IAC5D,OAAQ,IAAI,CAAC,SAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Views handler — session, overview, activity, metrics, extended views
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,74 @@
1
+ /**
2
+ * Views handler — session, overview, activity, metrics, extended views
3
+ */
4
+ import { ok, err, WORKSPACE_PROP, resolveWorkspace, getFormat } from "./types.js";
5
+ export const TOOLS = [
6
+ { name: "get_board_session", description: "RECOMMENDED FIRST CALL when starting work on a board. Returns everything in one call: board info, all columns with their UUIDs and names (needed for move_task), and your assigned tasks. Much more efficient than calling get_board + list_tasks separately.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
7
+ { name: "get_board_overview", description: "Get board overview with column structure, task counts per column, and board metadata. Lighter than get_board_session (no task details).", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
8
+ { name: "get_session", description: "Get your assigned tasks across all boards. Use this to find what you should work on. For a specific board's full context (columns, tasks), use get_board_session instead.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Optional: scope to a specific board" }, ...WORKSPACE_PROP } } },
9
+ { name: "list_activity", description: "Get recent activity feed (who did what, when). Provide exactly ONE of board_id or task_id. Shows task creation, status changes, comments, assignments, and moves. Ordered newest first.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID — activity for the whole board" }, task_id: { type: "string", description: "Task UUID — activity for a single task" }, limit: { type: "number", description: "Max results (default 25)" }, ...WORKSPACE_PROP } } },
10
+ { name: "get_board_summary", description: "Get board KPIs: task counts by status, workload by assignee, priority distribution, and recent activity stats. Useful for reporting and understanding board health.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, days: { type: "number", description: "Time window in days (default 7)" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
11
+ { name: "get_task_velocity", description: "Get task velocity: tasks created vs completed per day over time. Useful for tracking team throughput and trends.", inputSchema: { type: "object", properties: { days: { type: "number", description: "Time window in days (default 30)" }, ...WORKSPACE_PROP } } },
12
+ { name: "get_cost_metrics", description: "Get LLM cost data over time.", inputSchema: { type: "object", properties: { days: { type: "number", description: "Time window in days (default 30)" }, ...WORKSPACE_PROP } } },
13
+ { name: "get_task_distribution", description: "Get task status distribution (counts by status, for dashboards).", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID (optional)" }, ...WORKSPACE_PROP } } },
14
+ { name: "view_board_tasks", description: "Filtered task list view for a board. Returns tasks with full context in YAML/JSON format.", inputSchema: { type: "object", properties: { board_id: { type: "string", description: "Board UUID" }, status: { type: "string", description: "Filter by status" }, limit: { type: "number", description: "Max results" }, ...WORKSPACE_PROP }, required: ["board_id"] } },
15
+ { name: "view_task_detail", description: "Single task detail view with full context — description, stages, links, comments, activity.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
16
+ ];
17
+ export async function handleTool(name, args, callApi, buildUrl) {
18
+ const fmt = getFormat();
19
+ const ws = resolveWorkspace(args);
20
+ switch (name) {
21
+ case "get_board_session": return ok(await callApi("GET", buildUrl(`/api/v1/board/views/boards/${args.board_id}/session`, undefined, fmt || "yaml"), ws));
22
+ case "get_board_overview": return ok(await callApi("GET", buildUrl(`/api/v1/board/views/boards/${args.board_id}/overview`, undefined, fmt || "yaml"), ws));
23
+ case "get_session": {
24
+ if (args.board_id)
25
+ return ok(await callApi("GET", buildUrl(`/api/v1/board/boards/${args.board_id}`, undefined, fmt), ws));
26
+ return ok(await callApi("GET", buildUrl("/api/v1/board/agent-api/my-tasks", undefined, fmt), ws));
27
+ }
28
+ case "list_activity": {
29
+ const params = {};
30
+ if (args.limit)
31
+ params.per_page = String(args.limit);
32
+ if (args.task_id)
33
+ return ok(await callApi("GET", buildUrl(`/api/v1/board/activity/tasks/${args.task_id}`, params, fmt), ws));
34
+ if (args.board_id)
35
+ return ok(await callApi("GET", buildUrl(`/api/v1/board/activity/boards/${args.board_id}`, params, fmt), ws));
36
+ return err("Provide board_id or task_id");
37
+ }
38
+ case "get_board_summary": {
39
+ const params = { board_id: String(args.board_id) };
40
+ if (args.days)
41
+ params.days = String(args.days);
42
+ return ok(await callApi("GET", buildUrl("/api/v1/board/metrics/board-summary", params, fmt), ws));
43
+ }
44
+ case "get_task_velocity": {
45
+ const params = {};
46
+ if (args.days)
47
+ params.days = String(args.days);
48
+ return ok(await callApi("GET", buildUrl("/api/v1/board/metrics/task-velocity", params, fmt), ws));
49
+ }
50
+ case "get_cost_metrics": {
51
+ const params = {};
52
+ if (args.days)
53
+ params.days = String(args.days);
54
+ return ok(await callApi("GET", buildUrl("/api/v1/board/metrics/costs", params, fmt), ws));
55
+ }
56
+ case "get_task_distribution": {
57
+ const params = {};
58
+ if (args.board_id)
59
+ params.board_id = String(args.board_id);
60
+ return ok(await callApi("GET", buildUrl("/api/v1/board/metrics/distribution", params, fmt), ws));
61
+ }
62
+ case "view_board_tasks": {
63
+ const params = {};
64
+ if (args.status)
65
+ params.status = String(args.status);
66
+ if (args.limit)
67
+ params.limit = String(args.limit);
68
+ return ok(await callApi("GET", buildUrl(`/api/v1/board/views/boards/${args.board_id}/tasks`, params, fmt || "yaml"), ws));
69
+ }
70
+ case "view_task_detail": return ok(await callApi("GET", buildUrl(`/api/v1/board/views/tasks/${args.task_id}`, undefined, fmt || "yaml"), ws));
71
+ default: return null;
72
+ }
73
+ }
74
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/handlers/views.ts"],"names":[],"mappings":"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"}