@langadventurellc/task-trellis-mcp 2.5.0 → 2.6.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.
- package/README.md +42 -0
- package/dist/resources/__tests__/issueResources.test.d.ts +2 -0
- package/dist/resources/__tests__/issueResources.test.d.ts.map +1 -0
- package/dist/resources/__tests__/issueResources.test.js +209 -0
- package/dist/resources/__tests__/issueResources.test.js.map +1 -0
- package/dist/resources/buildIssueUri.d.ts +3 -0
- package/dist/resources/buildIssueUri.d.ts.map +1 -0
- package/dist/resources/buildIssueUri.js +9 -0
- package/dist/resources/buildIssueUri.js.map +1 -0
- package/dist/resources/decodeCursor.d.ts +6 -0
- package/dist/resources/decodeCursor.d.ts.map +1 -0
- package/dist/resources/decodeCursor.js +15 -0
- package/dist/resources/decodeCursor.js.map +1 -0
- package/dist/resources/encodeCursor.d.ts +6 -0
- package/dist/resources/encodeCursor.d.ts.map +1 -0
- package/dist/resources/encodeCursor.js +14 -0
- package/dist/resources/encodeCursor.js.map +1 -0
- package/dist/resources/handleListResourceTemplates.d.ts +6 -0
- package/dist/resources/handleListResourceTemplates.d.ts.map +1 -0
- package/dist/resources/handleListResourceTemplates.js +18 -0
- package/dist/resources/handleListResourceTemplates.js.map +1 -0
- package/dist/resources/handleListResources.d.ts +10 -0
- package/dist/resources/handleListResources.d.ts.map +1 -0
- package/dist/resources/handleListResources.js +20 -0
- package/dist/resources/handleListResources.js.map +1 -0
- package/dist/resources/handleReadResource.d.ts +12 -0
- package/dist/resources/handleReadResource.d.ts.map +1 -0
- package/dist/resources/handleReadResource.js +25 -0
- package/dist/resources/handleReadResource.js.map +1 -0
- package/dist/resources/index.d.ts +9 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +20 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/issueResources.d.ts +5 -0
- package/dist/resources/issueResources.d.ts.map +1 -0
- package/dist/resources/issueResources.js +15 -0
- package/dist/resources/issueResources.js.map +1 -0
- package/dist/resources/parseIssueUri.d.ts +7 -0
- package/dist/resources/parseIssueUri.d.ts.map +1 -0
- package/dist/resources/parseIssueUri.js +14 -0
- package/dist/resources/parseIssueUri.js.map +1 -0
- package/dist/server.js +11 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ Full documentation is available in the [docs](docs/index.md) folder.
|
|
|
20
20
|
- [Installation and Configuration](#installation-and-configuration)
|
|
21
21
|
- [Configuration](#configuration)
|
|
22
22
|
- [Available Tools](#available-tools)
|
|
23
|
+
- [MCP Resources](#mcp-resources)
|
|
23
24
|
- [Troubleshooting](#troubleshooting)
|
|
24
25
|
|
|
25
26
|
## At a Glance
|
|
@@ -180,6 +181,47 @@ Attachments are returned as a list of filenames when calling **get_issue** and a
|
|
|
180
181
|
|
|
181
182
|
- **prune_closed** - Clean up old completed/cancelled issues for maintenance
|
|
182
183
|
|
|
184
|
+
## MCP Resources
|
|
185
|
+
|
|
186
|
+
Task Trellis exposes issues as MCP resources, enabling Claude Code to @-mention them inline for quick reference.
|
|
187
|
+
|
|
188
|
+
### URI Scheme
|
|
189
|
+
|
|
190
|
+
Resources follow the URI scheme: `trellis://issue/<id>`
|
|
191
|
+
|
|
192
|
+
Example: `trellis://issue/T-my-task`
|
|
193
|
+
|
|
194
|
+
### Which Issues Appear
|
|
195
|
+
|
|
196
|
+
`resources/list` returns all **non-closed** issues — those with status `draft`, `open`, or `in-progress`. Issues with status `done` or `wont-do` are excluded.
|
|
197
|
+
|
|
198
|
+
### Read Payload (Minimal by Design)
|
|
199
|
+
|
|
200
|
+
`resources/read` returns **only** the issue's `id`, `title`, and `status` in a small markdown snippet:
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
# <title>
|
|
204
|
+
|
|
205
|
+
- id: <id>
|
|
206
|
+
- status: <status>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
This is intentional: the resource surface is designed for **discovery and @-mention autocomplete**, not for loading full issue context into prompts. To read the full issue body, prerequisites, history, and all other fields, use the `get_issue` MCP tool instead.
|
|
210
|
+
|
|
211
|
+
### @-Mention in Claude Code
|
|
212
|
+
|
|
213
|
+
You can reference a Trellis issue inline in Claude Code using its MCP server name as a prefix. If your MCP configuration names the server `task-trellis` (as in the default `.mcp.json`):
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
@task-trellis:trellis://issue/T-my-task
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
If you have renamed the server, substitute that name. See the [Claude Code plugins reference](https://code.claude.com/docs/en/plugins-reference) for the current @-mention prefix format.
|
|
220
|
+
|
|
221
|
+
### Stale-Context Caveat
|
|
222
|
+
|
|
223
|
+
Claude Code reads each resource once per @-mention and does not refresh it during the session. If an issue is updated after being mentioned, the in-session view will be stale. Use the `get_issue` tool for fresh data.
|
|
224
|
+
|
|
183
225
|
## Troubleshooting
|
|
184
226
|
|
|
185
227
|
### Common Issues
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueResources.test.d.ts","sourceRoot":"","sources":["../../../src/resources/__tests__/issueResources.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const models_1 = require("../../models");
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
const mockObject = {
|
|
6
|
+
id: "T-test-task",
|
|
7
|
+
type: models_1.TrellisObjectType.TASK,
|
|
8
|
+
title: "Test Task",
|
|
9
|
+
status: models_1.TrellisObjectStatus.OPEN,
|
|
10
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
11
|
+
parent: "F-test-feature",
|
|
12
|
+
prerequisites: [],
|
|
13
|
+
affectedFiles: new Map(),
|
|
14
|
+
log: [],
|
|
15
|
+
schema: "v1.0",
|
|
16
|
+
childrenIds: [],
|
|
17
|
+
body: "Task body",
|
|
18
|
+
created: "2026-01-01T00:00:00Z",
|
|
19
|
+
updated: "2026-01-01T00:00:00Z",
|
|
20
|
+
};
|
|
21
|
+
describe("buildIssueUri", () => {
|
|
22
|
+
it("returns trellis://issue/<id>", () => {
|
|
23
|
+
expect((0, index_1.buildIssueUri)("T-test-task")).toBe("trellis://issue/T-test-task");
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe("parseIssueUri", () => {
|
|
27
|
+
it("extracts the issue id from a valid URI", () => {
|
|
28
|
+
expect((0, index_1.parseIssueUri)("trellis://issue/T-test-task")).toBe("T-test-task");
|
|
29
|
+
});
|
|
30
|
+
it("returns null for wrong scheme", () => {
|
|
31
|
+
expect((0, index_1.parseIssueUri)("http://issue/T-test-task")).toBeNull();
|
|
32
|
+
});
|
|
33
|
+
it("returns null for wrong case (Trellis://)", () => {
|
|
34
|
+
expect((0, index_1.parseIssueUri)("Trellis://issue/T-test-task")).toBeNull();
|
|
35
|
+
});
|
|
36
|
+
it("returns null when issue/ segment is missing", () => {
|
|
37
|
+
expect((0, index_1.parseIssueUri)("trellis://T-test-task")).toBeNull();
|
|
38
|
+
});
|
|
39
|
+
it("returns null for empty id (trailing slash only)", () => {
|
|
40
|
+
expect((0, index_1.parseIssueUri)("trellis://issue/")).toBeNull();
|
|
41
|
+
});
|
|
42
|
+
it("returns null when a query string is present", () => {
|
|
43
|
+
expect((0, index_1.parseIssueUri)("trellis://issue/T-test-task?foo=bar")).toBeNull();
|
|
44
|
+
});
|
|
45
|
+
it("returns null when a fragment is present", () => {
|
|
46
|
+
expect((0, index_1.parseIssueUri)("trellis://issue/T-test-task#anchor")).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe("toResource", () => {
|
|
50
|
+
it("returns the correct resource shape without a size field", () => {
|
|
51
|
+
const resource = (0, index_1.toResource)(mockObject);
|
|
52
|
+
expect(resource).toEqual({
|
|
53
|
+
uri: "trellis://issue/T-test-task",
|
|
54
|
+
name: "T-test-task",
|
|
55
|
+
title: "Test Task",
|
|
56
|
+
description: "Test Task [open]",
|
|
57
|
+
mimeType: "text/markdown",
|
|
58
|
+
});
|
|
59
|
+
expect(resource).not.toHaveProperty("size");
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe("encodeCursor / decodeCursor", () => {
|
|
63
|
+
it("round-trips a non-negative integer offset", () => {
|
|
64
|
+
const cursor = (0, index_1.encodeCursor)(42);
|
|
65
|
+
expect((0, index_1.decodeCursor)(cursor)).toBe(42);
|
|
66
|
+
});
|
|
67
|
+
it("round-trips offset 0", () => {
|
|
68
|
+
expect((0, index_1.decodeCursor)((0, index_1.encodeCursor)(0))).toBe(0);
|
|
69
|
+
});
|
|
70
|
+
it("encodeCursor throws on a negative offset", () => {
|
|
71
|
+
expect(() => (0, index_1.encodeCursor)(-1)).toThrow();
|
|
72
|
+
});
|
|
73
|
+
it("encodeCursor throws on a non-integer offset", () => {
|
|
74
|
+
expect(() => (0, index_1.encodeCursor)(1.5)).toThrow();
|
|
75
|
+
});
|
|
76
|
+
it("decodeCursor throws on invalid base64 payload", () => {
|
|
77
|
+
const badCursor = Buffer.from("not-a-number").toString("base64");
|
|
78
|
+
expect(() => (0, index_1.decodeCursor)(badCursor)).toThrow();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
function makeMockRepository() {
|
|
82
|
+
return {
|
|
83
|
+
getObjectById: jest.fn(),
|
|
84
|
+
getObjects: jest.fn(),
|
|
85
|
+
saveObject: jest.fn(),
|
|
86
|
+
deleteObject: jest.fn(),
|
|
87
|
+
getChildrenOf: jest.fn(),
|
|
88
|
+
getAttachmentsFolder: jest.fn(),
|
|
89
|
+
listAttachments: jest.fn(),
|
|
90
|
+
copyAttachment: jest.fn(),
|
|
91
|
+
deleteAttachment: jest.fn(),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function makeObject(id, status = models_1.TrellisObjectStatus.OPEN) {
|
|
95
|
+
return {
|
|
96
|
+
id,
|
|
97
|
+
type: models_1.TrellisObjectType.TASK,
|
|
98
|
+
title: `Title ${id}`,
|
|
99
|
+
status,
|
|
100
|
+
priority: models_1.TrellisObjectPriority.MEDIUM,
|
|
101
|
+
parent: null,
|
|
102
|
+
prerequisites: [],
|
|
103
|
+
affectedFiles: new Map(),
|
|
104
|
+
log: [],
|
|
105
|
+
schema: "v1.0",
|
|
106
|
+
childrenIds: [],
|
|
107
|
+
body: "",
|
|
108
|
+
created: "2026-01-01T00:00:00Z",
|
|
109
|
+
updated: "2026-01-01T00:00:00Z",
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
describe("handleListResources", () => {
|
|
113
|
+
it("returns correct resource shape for each object", async () => {
|
|
114
|
+
const repo = makeMockRepository();
|
|
115
|
+
repo.getObjects.mockResolvedValue([makeObject("T-alpha")]);
|
|
116
|
+
const { resources } = await (0, index_1.handleListResources)({}, repo);
|
|
117
|
+
expect(resources).toHaveLength(1);
|
|
118
|
+
expect(resources[0]).toEqual({
|
|
119
|
+
uri: "trellis://issue/T-alpha",
|
|
120
|
+
name: "T-alpha",
|
|
121
|
+
title: "Title T-alpha",
|
|
122
|
+
description: "Title T-alpha [open]",
|
|
123
|
+
mimeType: "text/markdown",
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
it("calls getObjects with false to exclude closed issues", async () => {
|
|
127
|
+
const repo = makeMockRepository();
|
|
128
|
+
repo.getObjects.mockResolvedValue([]);
|
|
129
|
+
await (0, index_1.handleListResources)({}, repo);
|
|
130
|
+
expect(repo.getObjects).toHaveBeenCalledWith(false);
|
|
131
|
+
});
|
|
132
|
+
it("includes draft, open, and in-progress objects", async () => {
|
|
133
|
+
const repo = makeMockRepository();
|
|
134
|
+
repo.getObjects.mockResolvedValue([
|
|
135
|
+
makeObject("T-a", models_1.TrellisObjectStatus.DRAFT),
|
|
136
|
+
makeObject("T-b", models_1.TrellisObjectStatus.OPEN),
|
|
137
|
+
makeObject("T-c", models_1.TrellisObjectStatus.IN_PROGRESS),
|
|
138
|
+
]);
|
|
139
|
+
const { resources } = await (0, index_1.handleListResources)({}, repo);
|
|
140
|
+
const ids = resources.map((r) => r.name);
|
|
141
|
+
expect(ids).toContain("T-a");
|
|
142
|
+
expect(ids).toContain("T-b");
|
|
143
|
+
expect(ids).toContain("T-c");
|
|
144
|
+
});
|
|
145
|
+
it("paginates across two pages for 150 items", async () => {
|
|
146
|
+
const repo = makeMockRepository();
|
|
147
|
+
const items = Array.from({ length: 150 }, (_, i) => makeObject(`T-${String(i).padStart(3, "0")}`));
|
|
148
|
+
repo.getObjects.mockResolvedValue(items);
|
|
149
|
+
const page1 = await (0, index_1.handleListResources)({}, repo);
|
|
150
|
+
expect(page1.resources).toHaveLength(100);
|
|
151
|
+
expect(page1.nextCursor).toBeDefined();
|
|
152
|
+
const page2 = await (0, index_1.handleListResources)({ cursor: page1.nextCursor }, repo);
|
|
153
|
+
expect(page2.resources).toHaveLength(50);
|
|
154
|
+
expect(page2.nextCursor).toBeUndefined();
|
|
155
|
+
});
|
|
156
|
+
it("returns empty resources and no nextCursor when getObjects returns []", async () => {
|
|
157
|
+
const repo = makeMockRepository();
|
|
158
|
+
repo.getObjects.mockResolvedValue([]);
|
|
159
|
+
const result = await (0, index_1.handleListResources)({}, repo);
|
|
160
|
+
expect(result).toEqual({ resources: [] });
|
|
161
|
+
expect(result.nextCursor).toBeUndefined();
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe("handleListResourceTemplates", () => {
|
|
165
|
+
it("returns the trellis-issue template", () => {
|
|
166
|
+
const { resourceTemplates } = (0, index_1.handleListResourceTemplates)();
|
|
167
|
+
expect(resourceTemplates).toHaveLength(1);
|
|
168
|
+
expect(resourceTemplates[0]).toEqual({
|
|
169
|
+
uriTemplate: "trellis://issue/{id}",
|
|
170
|
+
name: "trellis-issue",
|
|
171
|
+
title: "Trellis Issue",
|
|
172
|
+
description: "A Trellis issue (project, epic, feature, or task) referenced by ID",
|
|
173
|
+
mimeType: "text/markdown",
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe("handleReadResource", () => {
|
|
178
|
+
it("returns minimal payload for a known id", async () => {
|
|
179
|
+
const repo = makeMockRepository();
|
|
180
|
+
const obj = makeObject("T-known", models_1.TrellisObjectStatus.IN_PROGRESS);
|
|
181
|
+
obj.body = "should not appear";
|
|
182
|
+
repo.getObjectById.mockResolvedValue(obj);
|
|
183
|
+
const result = await (0, index_1.handleReadResource)({ uri: "trellis://issue/T-known" }, repo);
|
|
184
|
+
const text = result.contents[0].text;
|
|
185
|
+
expect(text).toContain("Title T-known");
|
|
186
|
+
expect(text).toContain("T-known");
|
|
187
|
+
expect(text).toContain("in-progress");
|
|
188
|
+
expect(text).not.toContain("should not appear");
|
|
189
|
+
expect(text).not.toContain("prerequisites");
|
|
190
|
+
expect(text).not.toContain("parent");
|
|
191
|
+
expect(text).not.toContain("log");
|
|
192
|
+
});
|
|
193
|
+
it("throws with the id when the issue is not found", async () => {
|
|
194
|
+
const repo = makeMockRepository();
|
|
195
|
+
repo.getObjectById.mockResolvedValue(null);
|
|
196
|
+
await expect((0, index_1.handleReadResource)({ uri: "trellis://issue/T-missing" }, repo)).rejects.toThrow("Trellis issue not found: T-missing");
|
|
197
|
+
});
|
|
198
|
+
it("throws before calling repository when URI has no issue/ segment", async () => {
|
|
199
|
+
const repo = makeMockRepository();
|
|
200
|
+
await expect((0, index_1.handleReadResource)({ uri: "trellis://T-no-segment" }, repo)).rejects.toThrow();
|
|
201
|
+
expect(repo.getObjectById).not.toHaveBeenCalled();
|
|
202
|
+
});
|
|
203
|
+
it("throws before calling repository for http:// scheme", async () => {
|
|
204
|
+
const repo = makeMockRepository();
|
|
205
|
+
await expect((0, index_1.handleReadResource)({ uri: "http://issue/T-wrong-scheme" }, repo)).rejects.toThrow();
|
|
206
|
+
expect(repo.getObjectById).not.toHaveBeenCalled();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=issueResources.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueResources.test.js","sourceRoot":"","sources":["../../../src/resources/__tests__/issueResources.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildIssueUri.d.ts","sourceRoot":"","sources":["../../src/resources/buildIssueUri.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildIssueUri = buildIssueUri;
|
|
4
|
+
const URI_PREFIX = "trellis://issue/";
|
|
5
|
+
/** Returns the trellis resource URI for an issue. */
|
|
6
|
+
function buildIssueUri(id) {
|
|
7
|
+
return `${URI_PREFIX}${id}`;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=buildIssueUri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildIssueUri.js","sourceRoot":"","sources":["../../src/resources/buildIssueUri.ts"],"names":[],"mappings":";;AAGA,sCAEC;AALD,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC,qDAAqD;AACrD,SAAgB,aAAa,CAAC,EAAU;IACtC,OAAO,GAAG,UAAU,GAAG,EAAE,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeCursor.d.ts","sourceRoot":"","sources":["../../src/resources/decodeCursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeCursor = decodeCursor;
|
|
4
|
+
/**
|
|
5
|
+
* Decodes a base64 cursor back to an integer offset.
|
|
6
|
+
* Throws if the decoded value is not a valid non-negative integer.
|
|
7
|
+
*/
|
|
8
|
+
function decodeCursor(cursor) {
|
|
9
|
+
const decoded = Buffer.from(cursor, "base64").toString("utf8");
|
|
10
|
+
if (!/^\d+$/.test(decoded)) {
|
|
11
|
+
throw new Error(`decodeCursor: "${cursor}" does not decode to a non-negative integer`);
|
|
12
|
+
}
|
|
13
|
+
return parseInt(decoded, 10);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=decodeCursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeCursor.js","sourceRoot":"","sources":["../../src/resources/decodeCursor.ts"],"names":[],"mappings":";;AAIA,oCAQC;AAZD;;;GAGG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,6CAA6C,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeCursor.d.ts","sourceRoot":"","sources":["../../src/resources/encodeCursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOnD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encodeCursor = encodeCursor;
|
|
4
|
+
/**
|
|
5
|
+
* Base64-encodes a pagination offset for use as a cursor.
|
|
6
|
+
* Throws if `offset` is negative or non-integer.
|
|
7
|
+
*/
|
|
8
|
+
function encodeCursor(offset) {
|
|
9
|
+
if (!Number.isInteger(offset) || offset < 0) {
|
|
10
|
+
throw new Error(`encodeCursor: offset must be a non-negative integer, got ${offset}`);
|
|
11
|
+
}
|
|
12
|
+
return Buffer.from(String(offset)).toString("base64");
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=encodeCursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeCursor.js","sourceRoot":"","sources":["../../src/resources/encodeCursor.ts"],"names":[],"mappings":";;AAIA,oCAOC;AAXD;;;GAGG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,4DAA4D,MAAM,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ResourceTemplate } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
/** Returns the MCP resource template for Trellis issues. */
|
|
3
|
+
export declare function handleListResourceTemplates(): {
|
|
4
|
+
resourceTemplates: ResourceTemplate[];
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=handleListResourceTemplates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleListResourceTemplates.d.ts","sourceRoot":"","sources":["../../src/resources/handleListResourceTemplates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,4DAA4D;AAC5D,wBAAgB,2BAA2B,IAAI;IAC7C,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC,CAaA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleListResourceTemplates = handleListResourceTemplates;
|
|
4
|
+
/** Returns the MCP resource template for Trellis issues. */
|
|
5
|
+
function handleListResourceTemplates() {
|
|
6
|
+
return {
|
|
7
|
+
resourceTemplates: [
|
|
8
|
+
{
|
|
9
|
+
uriTemplate: "trellis://issue/{id}",
|
|
10
|
+
name: "trellis-issue",
|
|
11
|
+
title: "Trellis Issue",
|
|
12
|
+
description: "A Trellis issue (project, epic, feature, or task) referenced by ID",
|
|
13
|
+
mimeType: "text/markdown",
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=handleListResourceTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleListResourceTemplates.js","sourceRoot":"","sources":["../../src/resources/handleListResourceTemplates.ts"],"names":[],"mappings":";;AAGA,kEAeC;AAhBD,4DAA4D;AAC5D,SAAgB,2BAA2B;IAGzC,OAAO;QACL,iBAAiB,EAAE;YACjB;gBACE,WAAW,EAAE,sBAAsB;gBACnC,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,eAAe;gBACtB,WAAW,EACT,oEAAoE;gBACtE,QAAQ,EAAE,eAAe;aAC1B;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Resource } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { Repository } from "../repositories/Repository";
|
|
3
|
+
/** Lists open Trellis issues as MCP resources with cursor-based pagination. */
|
|
4
|
+
export declare function handleListResources({ cursor }: {
|
|
5
|
+
cursor?: string;
|
|
6
|
+
}, repository: Repository): Promise<{
|
|
7
|
+
resources: Resource[];
|
|
8
|
+
nextCursor?: string;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=handleListResources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleListResources.d.ts","sourceRoot":"","sources":["../../src/resources/handleListResources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAO7D,+EAA+E;AAC/E,wBAAsB,mBAAmB,CACvC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;IAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWzD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleListResources = handleListResources;
|
|
4
|
+
const decodeCursor_1 = require("./decodeCursor");
|
|
5
|
+
const encodeCursor_1 = require("./encodeCursor");
|
|
6
|
+
const issueResources_1 = require("./issueResources");
|
|
7
|
+
const PAGE_SIZE = 100;
|
|
8
|
+
/** Lists open Trellis issues as MCP resources with cursor-based pagination. */
|
|
9
|
+
async function handleListResources({ cursor }, repository) {
|
|
10
|
+
const offset = cursor !== undefined ? (0, decodeCursor_1.decodeCursor)(cursor) : 0;
|
|
11
|
+
const all = await repository.getObjects(false);
|
|
12
|
+
const sorted = [...all].sort((a, b) => a.id.localeCompare(b.id));
|
|
13
|
+
const page = sorted.slice(offset, offset + PAGE_SIZE);
|
|
14
|
+
const resources = page.map(issueResources_1.toResource);
|
|
15
|
+
const nextCursor = offset + PAGE_SIZE < sorted.length
|
|
16
|
+
? (0, encodeCursor_1.encodeCursor)(offset + PAGE_SIZE)
|
|
17
|
+
: undefined;
|
|
18
|
+
return nextCursor !== undefined ? { resources, nextCursor } : { resources };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=handleListResources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleListResources.js","sourceRoot":"","sources":["../../src/resources/handleListResources.ts"],"names":[],"mappings":";;AASA,kDAcC;AArBD,iDAA8C;AAC9C,iDAA8C;AAC9C,qDAA8C;AAE9C,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,+EAA+E;AACxE,KAAK,UAAU,mBAAmB,CACvC,EAAE,MAAM,EAAuB,EAC/B,UAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,2BAAY,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,2BAAU,CAAC,CAAC;IACvC,MAAM,UAAU,GACd,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM;QAChC,CAAC,CAAC,IAAA,2BAAY,EAAC,MAAM,GAAG,SAAS,CAAC;QAClC,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Repository } from "../repositories/Repository";
|
|
2
|
+
/** Reads a Trellis issue by URI and returns its minimal MCP resource contents (id, title, status only). */
|
|
3
|
+
export declare function handleReadResource({ uri }: {
|
|
4
|
+
uri: string;
|
|
5
|
+
}, repository: Repository): Promise<{
|
|
6
|
+
contents: Array<{
|
|
7
|
+
uri: string;
|
|
8
|
+
mimeType: string;
|
|
9
|
+
text: string;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=handleReadResource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleReadResource.d.ts","sourceRoot":"","sources":["../../src/resources/handleReadResource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,2GAA2G;AAC3G,wBAAsB,kBAAkB,CACtC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACxB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;IACT,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE,CAAC,CAoBD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleReadResource = handleReadResource;
|
|
4
|
+
const parseIssueUri_1 = require("./parseIssueUri");
|
|
5
|
+
/** Reads a Trellis issue by URI and returns its minimal MCP resource contents (id, title, status only). */
|
|
6
|
+
async function handleReadResource({ uri }, repository) {
|
|
7
|
+
const parsedId = (0, parseIssueUri_1.parseIssueUri)(uri);
|
|
8
|
+
if (parsedId === null) {
|
|
9
|
+
throw new Error(`Invalid Trellis issue URI: ${uri}`);
|
|
10
|
+
}
|
|
11
|
+
const obj = await repository.getObjectById(parsedId);
|
|
12
|
+
if (obj === null) {
|
|
13
|
+
throw new Error(`Trellis issue not found: ${parsedId}`);
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
contents: [
|
|
17
|
+
{
|
|
18
|
+
uri,
|
|
19
|
+
mimeType: "text/markdown",
|
|
20
|
+
text: `# ${obj.title}\n\n- id: ${obj.id}\n- status: ${obj.status}`,
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=handleReadResource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleReadResource.js","sourceRoot":"","sources":["../../src/resources/handleReadResource.ts"],"names":[],"mappings":";;AAIA,gDAyBC;AA5BD,mDAAgD;AAEhD,2GAA2G;AACpG,KAAK,UAAU,kBAAkB,CACtC,EAAE,GAAG,EAAmB,EACxB,UAAsB;IAItB,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,GAAG,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,GAAG;gBACH,QAAQ,EAAE,eAAe;gBACzB,IAAI,EAAE,KAAK,GAAG,CAAC,KAAK,aAAa,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,MAAM,EAAE;aACnE;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { buildIssueUri } from "./buildIssueUri";
|
|
2
|
+
export { decodeCursor } from "./decodeCursor";
|
|
3
|
+
export { encodeCursor } from "./encodeCursor";
|
|
4
|
+
export { handleListResources } from "./handleListResources";
|
|
5
|
+
export { handleListResourceTemplates } from "./handleListResourceTemplates";
|
|
6
|
+
export { handleReadResource } from "./handleReadResource";
|
|
7
|
+
export { toResource } from "./issueResources";
|
|
8
|
+
export { parseIssueUri } from "./parseIssueUri";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseIssueUri = exports.toResource = exports.handleReadResource = exports.handleListResourceTemplates = exports.handleListResources = exports.encodeCursor = exports.decodeCursor = exports.buildIssueUri = void 0;
|
|
4
|
+
var buildIssueUri_1 = require("./buildIssueUri");
|
|
5
|
+
Object.defineProperty(exports, "buildIssueUri", { enumerable: true, get: function () { return buildIssueUri_1.buildIssueUri; } });
|
|
6
|
+
var decodeCursor_1 = require("./decodeCursor");
|
|
7
|
+
Object.defineProperty(exports, "decodeCursor", { enumerable: true, get: function () { return decodeCursor_1.decodeCursor; } });
|
|
8
|
+
var encodeCursor_1 = require("./encodeCursor");
|
|
9
|
+
Object.defineProperty(exports, "encodeCursor", { enumerable: true, get: function () { return encodeCursor_1.encodeCursor; } });
|
|
10
|
+
var handleListResources_1 = require("./handleListResources");
|
|
11
|
+
Object.defineProperty(exports, "handleListResources", { enumerable: true, get: function () { return handleListResources_1.handleListResources; } });
|
|
12
|
+
var handleListResourceTemplates_1 = require("./handleListResourceTemplates");
|
|
13
|
+
Object.defineProperty(exports, "handleListResourceTemplates", { enumerable: true, get: function () { return handleListResourceTemplates_1.handleListResourceTemplates; } });
|
|
14
|
+
var handleReadResource_1 = require("./handleReadResource");
|
|
15
|
+
Object.defineProperty(exports, "handleReadResource", { enumerable: true, get: function () { return handleReadResource_1.handleReadResource; } });
|
|
16
|
+
var issueResources_1 = require("./issueResources");
|
|
17
|
+
Object.defineProperty(exports, "toResource", { enumerable: true, get: function () { return issueResources_1.toResource; } });
|
|
18
|
+
var parseIssueUri_1 = require("./parseIssueUri");
|
|
19
|
+
Object.defineProperty(exports, "parseIssueUri", { enumerable: true, get: function () { return parseIssueUri_1.parseIssueUri; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":";;;AAAA,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,6EAA4E;AAAnE,0IAAA,2BAA2B,OAAA;AACpC,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,mDAA8C;AAArC,4GAAA,UAAU,OAAA;AACnB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Resource } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { TrellisObject } from "../models/TrellisObject";
|
|
3
|
+
/** Converts a TrellisObject to an MCP Resource. */
|
|
4
|
+
export declare function toResource(obj: TrellisObject): Resource;
|
|
5
|
+
//# sourceMappingURL=issueResources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueResources.d.ts","sourceRoot":"","sources":["../../src/resources/issueResources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,QAAQ,CAQvD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toResource = toResource;
|
|
4
|
+
const buildIssueUri_1 = require("./buildIssueUri");
|
|
5
|
+
/** Converts a TrellisObject to an MCP Resource. */
|
|
6
|
+
function toResource(obj) {
|
|
7
|
+
return {
|
|
8
|
+
uri: (0, buildIssueUri_1.buildIssueUri)(obj.id),
|
|
9
|
+
name: obj.id,
|
|
10
|
+
title: obj.title,
|
|
11
|
+
description: `${obj.title} [${obj.status}]`,
|
|
12
|
+
mimeType: "text/markdown",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=issueResources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueResources.js","sourceRoot":"","sources":["../../src/resources/issueResources.ts"],"names":[],"mappings":";;AAKA,gCAQC;AAXD,mDAAgD;AAEhD,mDAAmD;AACnD,SAAgB,UAAU,CAAC,GAAkB;IAC3C,OAAO;QACL,GAAG,EAAE,IAAA,6BAAa,EAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,EAAE,GAAG,CAAC,EAAE;QACZ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,GAAG;QAC3C,QAAQ,EAAE,eAAe;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts the issue ID from a `trellis://issue/<id>` URI.
|
|
3
|
+
* Returns null for any malformed input: wrong scheme, wrong case, missing `issue/` segment,
|
|
4
|
+
* empty id, or query string / fragment present.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseIssueUri(uri: string): string | null;
|
|
7
|
+
//# sourceMappingURL=parseIssueUri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIssueUri.d.ts","sourceRoot":"","sources":["../../src/resources/parseIssueUri.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseIssueUri = parseIssueUri;
|
|
4
|
+
const URI_PATTERN = /^trellis:\/\/issue\/([^?#]+)$/;
|
|
5
|
+
/**
|
|
6
|
+
* Extracts the issue ID from a `trellis://issue/<id>` URI.
|
|
7
|
+
* Returns null for any malformed input: wrong scheme, wrong case, missing `issue/` segment,
|
|
8
|
+
* empty id, or query string / fragment present.
|
|
9
|
+
*/
|
|
10
|
+
function parseIssueUri(uri) {
|
|
11
|
+
const match = URI_PATTERN.exec(uri);
|
|
12
|
+
return match ? match[1] : null;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=parseIssueUri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIssueUri.js","sourceRoot":"","sources":["../../src/resources/parseIssueUri.ts"],"names":[],"mappings":";;AAOA,sCAGC;AAVD,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAEpD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -15,6 +15,7 @@ const configuration_1 = require("./configuration");
|
|
|
15
15
|
const repositories_1 = require("./repositories");
|
|
16
16
|
const LocalTaskTrellisService_1 = require("./services/local/LocalTaskTrellisService");
|
|
17
17
|
const tools_1 = require("./tools");
|
|
18
|
+
const resources_1 = require("./resources");
|
|
18
19
|
// Parse command line arguments
|
|
19
20
|
const program = new commander_1.Command();
|
|
20
21
|
program
|
|
@@ -88,6 +89,7 @@ A browser UI is also available; call get_ui_info to retrieve its URL whenever th
|
|
|
88
89
|
}, {
|
|
89
90
|
capabilities: {
|
|
90
91
|
tools: {},
|
|
92
|
+
resources: { listChanged: true },
|
|
91
93
|
},
|
|
92
94
|
});
|
|
93
95
|
server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => {
|
|
@@ -142,6 +144,15 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, (request) => {
|
|
|
142
144
|
throw new Error(`Unknown tool: ${toolName}`);
|
|
143
145
|
}
|
|
144
146
|
});
|
|
147
|
+
server.setRequestHandler(types_js_1.ListResourcesRequestSchema, (request) => {
|
|
148
|
+
return (0, resources_1.handleListResources)(request.params ?? {}, getRepository());
|
|
149
|
+
});
|
|
150
|
+
server.setRequestHandler(types_js_1.ListResourceTemplatesRequestSchema, () => {
|
|
151
|
+
return (0, resources_1.handleListResourceTemplates)();
|
|
152
|
+
});
|
|
153
|
+
server.setRequestHandler(types_js_1.ReadResourceRequestSchema, (request) => {
|
|
154
|
+
return (0, resources_1.handleReadResource)(request.params, getRepository());
|
|
155
|
+
});
|
|
145
156
|
async function runServer() {
|
|
146
157
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
147
158
|
await server.connect(transport);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;AAEA,wEAAmE;AACnE,wEAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langadventurellc/task-trellis-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "An MCP server that helps AI coding agents break down projects into tasks and track their progress.",
|
|
5
5
|
"homepage": "https://github.com/langadventurellc/task-trellis-mcp#readme",
|
|
6
6
|
"bugs": {
|