@langadventurellc/task-trellis-mcp 2.6.0 → 2.7.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 (81) hide show
  1. package/README.md +9 -42
  2. package/dist/http/__tests__/projectTreePage.test.js +161 -0
  3. package/dist/http/__tests__/projectTreePage.test.js.map +1 -1
  4. package/dist/http/appShell.d.ts.map +1 -1
  5. package/dist/http/appShell.js +137 -3
  6. package/dist/http/appShell.js.map +1 -1
  7. package/dist/http/projectTreePage/__tests__/computeInitialOpenSet.test.d.ts +2 -0
  8. package/dist/http/projectTreePage/__tests__/computeInitialOpenSet.test.d.ts.map +1 -0
  9. package/dist/http/projectTreePage/__tests__/computeInitialOpenSet.test.js +82 -0
  10. package/dist/http/projectTreePage/__tests__/computeInitialOpenSet.test.js.map +1 -0
  11. package/dist/http/projectTreePage/__tests__/pruneCompletedSubtrees.test.d.ts +2 -0
  12. package/dist/http/projectTreePage/__tests__/pruneCompletedSubtrees.test.d.ts.map +1 -0
  13. package/dist/http/projectTreePage/__tests__/pruneCompletedSubtrees.test.js +77 -0
  14. package/dist/http/projectTreePage/__tests__/pruneCompletedSubtrees.test.js.map +1 -0
  15. package/dist/http/projectTreePage/__tests__/renderTreeFragment.test.d.ts +2 -0
  16. package/dist/http/projectTreePage/__tests__/renderTreeFragment.test.d.ts.map +1 -0
  17. package/dist/http/projectTreePage/__tests__/renderTreeFragment.test.js +104 -0
  18. package/dist/http/projectTreePage/__tests__/renderTreeFragment.test.js.map +1 -0
  19. package/dist/http/projectTreePage/computeInitialOpenSet.d.ts +1 -1
  20. package/dist/http/projectTreePage/computeInitialOpenSet.d.ts.map +1 -1
  21. package/dist/http/projectTreePage/computeInitialOpenSet.js +2 -1
  22. package/dist/http/projectTreePage/computeInitialOpenSet.js.map +1 -1
  23. package/dist/http/projectTreePage/projectTreeHandler.d.ts.map +1 -1
  24. package/dist/http/projectTreePage/projectTreeHandler.js +6 -1
  25. package/dist/http/projectTreePage/projectTreeHandler.js.map +1 -1
  26. package/dist/http/projectTreePage/pruneCompletedSubtrees.d.ts +4 -0
  27. package/dist/http/projectTreePage/pruneCompletedSubtrees.d.ts.map +1 -0
  28. package/dist/http/projectTreePage/pruneCompletedSubtrees.js +27 -0
  29. package/dist/http/projectTreePage/pruneCompletedSubtrees.js.map +1 -0
  30. package/dist/http/projectTreePage/renderTreeFragment.d.ts +6 -2
  31. package/dist/http/projectTreePage/renderTreeFragment.d.ts.map +1 -1
  32. package/dist/http/projectTreePage/renderTreeFragment.js +11 -6
  33. package/dist/http/projectTreePage/renderTreeFragment.js.map +1 -1
  34. package/dist/http/projectTreePage/searchHandler.d.ts.map +1 -1
  35. package/dist/http/projectTreePage/searchHandler.js +15 -3
  36. package/dist/http/projectTreePage/searchHandler.js.map +1 -1
  37. package/dist/http/projectTreePage/treeRow.js +1 -1
  38. package/dist/http/projectTreePage/treeRow.js.map +1 -1
  39. package/dist/server.js +0 -11
  40. package/dist/server.js.map +1 -1
  41. package/package.json +1 -1
  42. package/dist/resources/__tests__/issueResources.test.d.ts +0 -2
  43. package/dist/resources/__tests__/issueResources.test.d.ts.map +0 -1
  44. package/dist/resources/__tests__/issueResources.test.js +0 -209
  45. package/dist/resources/__tests__/issueResources.test.js.map +0 -1
  46. package/dist/resources/buildIssueUri.d.ts +0 -3
  47. package/dist/resources/buildIssueUri.d.ts.map +0 -1
  48. package/dist/resources/buildIssueUri.js +0 -9
  49. package/dist/resources/buildIssueUri.js.map +0 -1
  50. package/dist/resources/decodeCursor.d.ts +0 -6
  51. package/dist/resources/decodeCursor.d.ts.map +0 -1
  52. package/dist/resources/decodeCursor.js +0 -15
  53. package/dist/resources/decodeCursor.js.map +0 -1
  54. package/dist/resources/encodeCursor.d.ts +0 -6
  55. package/dist/resources/encodeCursor.d.ts.map +0 -1
  56. package/dist/resources/encodeCursor.js +0 -14
  57. package/dist/resources/encodeCursor.js.map +0 -1
  58. package/dist/resources/handleListResourceTemplates.d.ts +0 -6
  59. package/dist/resources/handleListResourceTemplates.d.ts.map +0 -1
  60. package/dist/resources/handleListResourceTemplates.js +0 -18
  61. package/dist/resources/handleListResourceTemplates.js.map +0 -1
  62. package/dist/resources/handleListResources.d.ts +0 -10
  63. package/dist/resources/handleListResources.d.ts.map +0 -1
  64. package/dist/resources/handleListResources.js +0 -20
  65. package/dist/resources/handleListResources.js.map +0 -1
  66. package/dist/resources/handleReadResource.d.ts +0 -12
  67. package/dist/resources/handleReadResource.d.ts.map +0 -1
  68. package/dist/resources/handleReadResource.js +0 -25
  69. package/dist/resources/handleReadResource.js.map +0 -1
  70. package/dist/resources/index.d.ts +0 -9
  71. package/dist/resources/index.d.ts.map +0 -1
  72. package/dist/resources/index.js +0 -20
  73. package/dist/resources/index.js.map +0 -1
  74. package/dist/resources/issueResources.d.ts +0 -5
  75. package/dist/resources/issueResources.d.ts.map +0 -1
  76. package/dist/resources/issueResources.js +0 -15
  77. package/dist/resources/issueResources.js.map +0 -1
  78. package/dist/resources/parseIssueUri.d.ts +0 -7
  79. package/dist/resources/parseIssueUri.d.ts.map +0 -1
  80. package/dist/resources/parseIssueUri.js +0 -14
  81. package/dist/resources/parseIssueUri.js.map +0 -1
@@ -1,209 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"issueResources.test.js","sourceRoot":"","sources":["../../../src/resources/__tests__/issueResources.test.ts"],"names":[],"mappings":";;AAAA,yCAIsB;AAGtB,oCASkB;AAElB,MAAM,UAAU,GAAkB;IAChC,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,0BAAiB,CAAC,IAAI;IAC5B,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,4BAAmB,CAAC,IAAI;IAChC,QAAQ,EAAE,8BAAqB,CAAC,MAAM;IACtC,MAAM,EAAE,gBAAgB;IACxB,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,IAAI,GAAG,EAAE;IACxB,GAAG,EAAE,EAAE;IACP,MAAM,EAAE,MAAM;IACd,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,sBAAsB;CAChC,CAAC;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,IAAA,qBAAa,EAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,IAAA,qBAAa,EAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,IAAA,qBAAa,EAAC,0BAA0B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,IAAA,qBAAa,EAAC,6BAA6B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,IAAA,qBAAa,EAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,IAAA,qBAAa,EAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,IAAA,qBAAa,EAAC,qCAAqC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,IAAA,qBAAa,EAAC,oCAAoC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAC,UAAU,CAAC,CAAC;QAExC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACvB,GAAG,EAAE,6BAA6B;YAClC,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,IAAA,oBAAY,EAAC,IAAA,oBAAY,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,oBAAY,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,oBAAY,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,oBAAY,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,kBAAkB;IACzB,OAAO;QACL,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;QACxB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;QACrB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;QACrB,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE;QACvB,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;QACxB,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE;QAC/B,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;QAC1B,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;QACzB,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,EAAU,EACV,SAA8B,4BAAmB,CAAC,IAAI;IAEtD,OAAO;QACL,EAAE;QACF,IAAI,EAAE,0BAAiB,CAAC,IAAI;QAC5B,KAAK,EAAE,SAAS,EAAE,EAAE;QACpB,MAAM;QACN,QAAQ,EAAE,8BAAqB,CAAC,MAAM;QACtC,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,EAAE;QACf,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE,sBAAsB;KAChC,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,2BAAmB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1D,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3B,GAAG,EAAE,yBAAyB;YAC9B,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAEtC,MAAM,IAAA,2BAAmB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEpC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAChC,UAAU,CAAC,KAAK,EAAE,4BAAmB,CAAC,KAAK,CAAC;YAC5C,UAAU,CAAC,KAAK,EAAE,4BAAmB,CAAC,IAAI,CAAC;YAC3C,UAAU,CAAC,KAAK,EAAE,4BAAmB,CAAC,WAAW,CAAC;SACnD,CAAC,CAAC;QAEH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,2BAAmB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1D,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACjD,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAC9C,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAmB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAEvC,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAmB,EAAC,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAmB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEnD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAA,mCAA2B,GAAE,CAAC;QAE5D,MAAM,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACnC,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,eAAe;YACtB,WAAW,EACT,oEAAoE;YACtE,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,4BAAmB,CAAC,WAAW,CAAC,CAAC;QACnE,GAAG,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAkB,EACrC,EAAE,GAAG,EAAE,yBAAyB,EAAE,EAClC,IAAI,CACL,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,MAAM,CACV,IAAA,0BAAkB,EAAC,EAAE,GAAG,EAAE,2BAA2B,EAAE,EAAE,IAAI,CAAC,CAC/D,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAElC,MAAM,MAAM,CACV,IAAA,0BAAkB,EAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE,EAAE,IAAI,CAAC,CAC5D,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEpB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAElC,MAAM,MAAM,CACV,IAAA,0BAAkB,EAAC,EAAE,GAAG,EAAE,6BAA6B,EAAE,EAAE,IAAI,CAAC,CACjE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEpB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- /** Returns the trellis resource URI for an issue. */
2
- export declare function buildIssueUri(id: string): string;
3
- //# sourceMappingURL=buildIssueUri.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,6 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,15 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,6 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,14 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,6 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,18 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,10 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,20 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,12 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,25 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,20 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,5 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,15 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,14 +0,0 @@
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
@@ -1 +0,0 @@
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"}