@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.
Files changed (44) hide show
  1. package/README.md +42 -0
  2. package/dist/resources/__tests__/issueResources.test.d.ts +2 -0
  3. package/dist/resources/__tests__/issueResources.test.d.ts.map +1 -0
  4. package/dist/resources/__tests__/issueResources.test.js +209 -0
  5. package/dist/resources/__tests__/issueResources.test.js.map +1 -0
  6. package/dist/resources/buildIssueUri.d.ts +3 -0
  7. package/dist/resources/buildIssueUri.d.ts.map +1 -0
  8. package/dist/resources/buildIssueUri.js +9 -0
  9. package/dist/resources/buildIssueUri.js.map +1 -0
  10. package/dist/resources/decodeCursor.d.ts +6 -0
  11. package/dist/resources/decodeCursor.d.ts.map +1 -0
  12. package/dist/resources/decodeCursor.js +15 -0
  13. package/dist/resources/decodeCursor.js.map +1 -0
  14. package/dist/resources/encodeCursor.d.ts +6 -0
  15. package/dist/resources/encodeCursor.d.ts.map +1 -0
  16. package/dist/resources/encodeCursor.js +14 -0
  17. package/dist/resources/encodeCursor.js.map +1 -0
  18. package/dist/resources/handleListResourceTemplates.d.ts +6 -0
  19. package/dist/resources/handleListResourceTemplates.d.ts.map +1 -0
  20. package/dist/resources/handleListResourceTemplates.js +18 -0
  21. package/dist/resources/handleListResourceTemplates.js.map +1 -0
  22. package/dist/resources/handleListResources.d.ts +10 -0
  23. package/dist/resources/handleListResources.d.ts.map +1 -0
  24. package/dist/resources/handleListResources.js +20 -0
  25. package/dist/resources/handleListResources.js.map +1 -0
  26. package/dist/resources/handleReadResource.d.ts +12 -0
  27. package/dist/resources/handleReadResource.d.ts.map +1 -0
  28. package/dist/resources/handleReadResource.js +25 -0
  29. package/dist/resources/handleReadResource.js.map +1 -0
  30. package/dist/resources/index.d.ts +9 -0
  31. package/dist/resources/index.d.ts.map +1 -0
  32. package/dist/resources/index.js +20 -0
  33. package/dist/resources/index.js.map +1 -0
  34. package/dist/resources/issueResources.d.ts +5 -0
  35. package/dist/resources/issueResources.d.ts.map +1 -0
  36. package/dist/resources/issueResources.js +15 -0
  37. package/dist/resources/issueResources.js.map +1 -0
  38. package/dist/resources/parseIssueUri.d.ts +7 -0
  39. package/dist/resources/parseIssueUri.d.ts.map +1 -0
  40. package/dist/resources/parseIssueUri.js +14 -0
  41. package/dist/resources/parseIssueUri.js.map +1 -0
  42. package/dist/server.js +11 -0
  43. package/dist/server.js.map +1 -1
  44. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=issueResources.test.d.ts.map
@@ -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,3 @@
1
+ /** Returns the trellis resource URI for an issue. */
2
+ export declare function buildIssueUri(id: string): string;
3
+ //# sourceMappingURL=buildIssueUri.d.ts.map
@@ -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,6 @@
1
+ /**
2
+ * Decodes a base64 cursor back to an integer offset.
3
+ * Throws if the decoded value is not a valid non-negative integer.
4
+ */
5
+ export declare function decodeCursor(cursor: string): number;
6
+ //# sourceMappingURL=decodeCursor.d.ts.map
@@ -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,6 @@
1
+ /**
2
+ * Base64-encodes a pagination offset for use as a cursor.
3
+ * Throws if `offset` is negative or non-integer.
4
+ */
5
+ export declare function encodeCursor(offset: number): string;
6
+ //# sourceMappingURL=encodeCursor.d.ts.map
@@ -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);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;AAEA,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAC5C,yCAAoC;AACpC,4CAAoB;AACpB,gDAAwB;AAExB,6CAAgD;AAChD,mDAKyB;AACzB,iDAA6D;AAE7D,sFAAmF;AACnF,mCA2BiB;AAEjB,+BAA+B;AAC/B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,yBAAyB,CAAC;KACtC,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;KACvD,MAAM,CACL,2BAA2B,EAC3B,8CAA8C,CAC/C;KACA,MAAM,CACL,qBAAqB,EACrB,yDAAyD,EACzD,GAAG,CACJ,CAAC;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAC;AAQhB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAc,CAAC;AAE3C,2CAA2C;AAC3C,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACvD,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CACX,qDAAqD,OAAO,CAAC,SAAS,GAAG,CAC1E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CACX,0DAA0D,cAAc,EAAE,CAC3E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,GACd,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAEzE,iCAAiC;AACjC,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAClB,CAAC;QACzB,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,2CAA2C,EAC3C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO,OAAO,CAAC,CAAC,mBAAmB;IACrC,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;AAE3C,uBAAuB;AACvB,MAAM,YAAY,GAAiB;IACjC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;IAC9C,SAAS,EAAE,cAAc;IACzB,kBAAkB,EAAE,cAAI,CAAC,IAAI,CAC3B,IAAA,8BAAc,GAAE,EAChB,UAAU,EACV,IAAA,iCAAiB,EAAC,UAAU,CAAC,CAC9B;IACD,YAAY,EAAE,IAAA,mCAAmB,EAAC,UAAU,CAAC;CAC9C,CAAC;AAEF,SAAS,aAAa;IACpB,OAAO,IAAI,8BAAe,CAAC,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,iDAAuB,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB;IACE,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE;;;;;;;;;;;;;;;;;;sGAkBqF;CACnG,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,GAAG,EAAE;IACpD,MAAM,KAAK,GAAc;QACvB,wBAAgB;QAChB,wBAAgB;QAChB,qBAAa;QACb,wBAAgB;QAChB,uBAAe;QACf,2BAAmB;QACnB,+BAAuB;QACvB,qBAAa;QACb,iCAAyB;QACzB,wBAAgB;QAChB,qBAAa;QACb,yBAAiB;QACjB,4BAAoB;KACrB,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;IAC1D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE3D,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,cAAc;YACjB,OAAO,IAAA,0BAAkB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7D,KAAK,cAAc;YACjB,OAAO,IAAA,0BAAkB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC3E,KAAK,WAAW;YACd,OAAO,IAAA,uBAAe,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3C,KAAK,cAAc;YACjB,OAAO,IAAA,0BAAkB,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9C,KAAK,aAAa;YAChB,OAAO,IAAA,yBAAiB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC5D,KAAK,kBAAkB;YACrB,OAAO,IAAA,6BAAqB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAChE,KAAK,uBAAuB;YAC1B,OAAO,IAAA,iCAAyB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACpE,KAAK,YAAY;YACf,OAAO,IAAA,uBAAe,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1D,KAAK,0BAA0B;YAC7B,OAAO,IAAA,mCAA2B,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACtE,KAAK,eAAe;YAClB,OAAO,IAAA,0BAAkB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC3E,KAAK,aAAa;YAChB,OAAO,IAAA,uBAAe,EAAC,UAAU,CAAC,CAAC;QACrC,KAAK,gBAAgB;YACnB,OAAO,IAAA,2BAAmB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9D,KAAK,mBAAmB;YACtB,OAAO,IAAA,8BAAsB,EAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACjE;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS;IACtB,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAA,6BAAgB,GAAE,CAAC;QAClC,MAAM,OAAO,GAAG,CAAC,GAA0B,EAAE,EAAE;YAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,qCAAqC,IAAI,cAAc,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACxB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAEnE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACtD,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,uCAAuC;IACvC,IAAI,YAAY,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CACV,8CAA8C,YAAY,CAAC,SAAS,UAAU,CAC/E,CAAC;YACF,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CACtC,UAAU,EACV,YAAY,CAAC,SAAS,CACvB,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/E,CAAC;YACF,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC;AAED,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
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.5.0",
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": {