@langadventurellc/task-trellis-mcp 2.4.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 (83) hide show
  1. package/README.md +42 -0
  2. package/dist/http/__tests__/fileHandler.test.d.ts +2 -0
  3. package/dist/http/__tests__/fileHandler.test.d.ts.map +1 -0
  4. package/dist/http/__tests__/fileHandler.test.js +83 -0
  5. package/dist/http/__tests__/fileHandler.test.js.map +1 -0
  6. package/dist/http/__tests__/projectTreePage.test.js +3 -0
  7. package/dist/http/__tests__/projectTreePage.test.js.map +1 -1
  8. package/dist/http/index.d.ts.map +1 -1
  9. package/dist/http/index.js +1 -0
  10. package/dist/http/index.js.map +1 -1
  11. package/dist/http/projectTreePage/__tests__/renderDetailView.test.js +18 -0
  12. package/dist/http/projectTreePage/__tests__/renderDetailView.test.js.map +1 -1
  13. package/dist/http/projectTreePage/__tests__/renderMarkdown.test.d.ts +2 -0
  14. package/dist/http/projectTreePage/__tests__/renderMarkdown.test.d.ts.map +1 -0
  15. package/dist/http/projectTreePage/__tests__/renderMarkdown.test.js +49 -0
  16. package/dist/http/projectTreePage/__tests__/renderMarkdown.test.js.map +1 -0
  17. package/dist/http/projectTreePage/detailViewHandler.d.ts.map +1 -1
  18. package/dist/http/projectTreePage/detailViewHandler.js +5 -2
  19. package/dist/http/projectTreePage/detailViewHandler.js.map +1 -1
  20. package/dist/http/projectTreePage/fileHandler.d.ts +4 -0
  21. package/dist/http/projectTreePage/fileHandler.d.ts.map +1 -0
  22. package/dist/http/projectTreePage/fileHandler.js +48 -0
  23. package/dist/http/projectTreePage/fileHandler.js.map +1 -0
  24. package/dist/http/projectTreePage/index.d.ts +1 -0
  25. package/dist/http/projectTreePage/index.d.ts.map +1 -1
  26. package/dist/http/projectTreePage/index.js +3 -1
  27. package/dist/http/projectTreePage/index.js.map +1 -1
  28. package/dist/http/projectTreePage/renderDetailView.d.ts +1 -1
  29. package/dist/http/projectTreePage/renderDetailView.d.ts.map +1 -1
  30. package/dist/http/projectTreePage/renderDetailView.js +22 -3
  31. package/dist/http/projectTreePage/renderDetailView.js.map +1 -1
  32. package/dist/http/projectTreePage/renderMarkdown.d.ts +2 -0
  33. package/dist/http/projectTreePage/renderMarkdown.d.ts.map +1 -0
  34. package/dist/http/projectTreePage/renderMarkdown.js +18 -0
  35. package/dist/http/projectTreePage/renderMarkdown.js.map +1 -0
  36. package/dist/http/styles.css +175 -0
  37. package/dist/repositories/local/LocalRepository.d.ts +1 -0
  38. package/dist/repositories/local/LocalRepository.d.ts.map +1 -1
  39. package/dist/repositories/local/LocalRepository.js +9 -0
  40. package/dist/repositories/local/LocalRepository.js.map +1 -1
  41. package/dist/resources/__tests__/issueResources.test.d.ts +2 -0
  42. package/dist/resources/__tests__/issueResources.test.d.ts.map +1 -0
  43. package/dist/resources/__tests__/issueResources.test.js +209 -0
  44. package/dist/resources/__tests__/issueResources.test.js.map +1 -0
  45. package/dist/resources/buildIssueUri.d.ts +3 -0
  46. package/dist/resources/buildIssueUri.d.ts.map +1 -0
  47. package/dist/resources/buildIssueUri.js +9 -0
  48. package/dist/resources/buildIssueUri.js.map +1 -0
  49. package/dist/resources/decodeCursor.d.ts +6 -0
  50. package/dist/resources/decodeCursor.d.ts.map +1 -0
  51. package/dist/resources/decodeCursor.js +15 -0
  52. package/dist/resources/decodeCursor.js.map +1 -0
  53. package/dist/resources/encodeCursor.d.ts +6 -0
  54. package/dist/resources/encodeCursor.d.ts.map +1 -0
  55. package/dist/resources/encodeCursor.js +14 -0
  56. package/dist/resources/encodeCursor.js.map +1 -0
  57. package/dist/resources/handleListResourceTemplates.d.ts +6 -0
  58. package/dist/resources/handleListResourceTemplates.d.ts.map +1 -0
  59. package/dist/resources/handleListResourceTemplates.js +18 -0
  60. package/dist/resources/handleListResourceTemplates.js.map +1 -0
  61. package/dist/resources/handleListResources.d.ts +10 -0
  62. package/dist/resources/handleListResources.d.ts.map +1 -0
  63. package/dist/resources/handleListResources.js +20 -0
  64. package/dist/resources/handleListResources.js.map +1 -0
  65. package/dist/resources/handleReadResource.d.ts +12 -0
  66. package/dist/resources/handleReadResource.d.ts.map +1 -0
  67. package/dist/resources/handleReadResource.js +25 -0
  68. package/dist/resources/handleReadResource.js.map +1 -0
  69. package/dist/resources/index.d.ts +9 -0
  70. package/dist/resources/index.d.ts.map +1 -0
  71. package/dist/resources/index.js +20 -0
  72. package/dist/resources/index.js.map +1 -0
  73. package/dist/resources/issueResources.d.ts +5 -0
  74. package/dist/resources/issueResources.d.ts.map +1 -0
  75. package/dist/resources/issueResources.js +15 -0
  76. package/dist/resources/issueResources.js.map +1 -0
  77. package/dist/resources/parseIssueUri.d.ts +7 -0
  78. package/dist/resources/parseIssueUri.d.ts.map +1 -0
  79. package/dist/resources/parseIssueUri.js +14 -0
  80. package/dist/resources/parseIssueUri.js.map +1 -0
  81. package/dist/server.js +11 -0
  82. package/dist/server.js.map +1 -1
  83. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"renderDetailView.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderDetailView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderDetailView.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderDetailView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function renderMarkdown(src: string): string;
2
+ //# sourceMappingURL=renderMarkdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderMarkdown.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderMarkdown.ts"],"names":[],"mappings":"AAWA,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderMarkdown = renderMarkdown;
7
+ const markdown_it_1 = __importDefault(require("markdown-it"));
8
+ const md = new markdown_it_1.default({
9
+ html: false,
10
+ linkify: false,
11
+ breaks: false,
12
+ typographer: false,
13
+ });
14
+ md.disable(["autolink"]);
15
+ function renderMarkdown(src) {
16
+ return md.render(src);
17
+ }
18
+ //# sourceMappingURL=renderMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderMarkdown.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderMarkdown.ts"],"names":[],"mappings":";;;;;AAWA,wCAEC;AAbD,8DAAqC;AAErC,MAAM,EAAE,GAAG,IAAI,qBAAU,CAAC;IACxB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC;AAEH,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAEzB,SAAgB,cAAc,CAAC,GAAW;IACxC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC"}
@@ -687,6 +687,7 @@ a {
687
687
  .id-chip {
688
688
  display: inline-flex;
689
689
  align-items: center;
690
+ justify-content: center;
690
691
  gap: 4px;
691
692
  font-family: var(--font-mono);
692
693
  font-size: 10px;
@@ -696,11 +697,17 @@ a {
696
697
  border-radius: 3px;
697
698
  background: var(--gray-50);
698
699
  margin-left: 2px;
700
+ cursor: pointer;
701
+ user-select: all;
699
702
  }
700
703
  .id-chip:hover {
701
704
  background: var(--gray-100);
702
705
  color: var(--text);
703
706
  }
707
+ .id-chip:focus-visible {
708
+ outline: 2px solid var(--accent);
709
+ outline-offset: 1px;
710
+ }
704
711
 
705
712
  /* ----- Field blocks ----- */
706
713
  .field-group {
@@ -724,6 +731,45 @@ a {
724
731
  font-size: var(--text-sm);
725
732
  }
726
733
 
734
+ /* File path row (click-to-copy + open-raw link) */
735
+ .file-path-row {
736
+ display: flex;
737
+ align-items: center;
738
+ gap: var(--sp-3);
739
+ flex-wrap: wrap;
740
+ }
741
+ .file-path {
742
+ font-family: var(--font-mono);
743
+ font-size: var(--text-sm);
744
+ color: var(--text);
745
+ background: var(--bg-sunken);
746
+ border: 1px solid var(--border);
747
+ border-radius: var(--radius);
748
+ padding: 4px 8px;
749
+ cursor: pointer;
750
+ user-select: all;
751
+ word-break: break-all;
752
+ flex: 1;
753
+ min-width: 0;
754
+ }
755
+ .file-path:hover {
756
+ background: var(--accent-tint);
757
+ border-color: var(--accent-border);
758
+ }
759
+ .file-path:focus-visible {
760
+ outline: 2px solid var(--accent);
761
+ outline-offset: 1px;
762
+ }
763
+ .file-raw-link {
764
+ font-size: var(--text-sm);
765
+ color: var(--accent);
766
+ text-decoration: none;
767
+ white-space: nowrap;
768
+ }
769
+ .file-raw-link:hover {
770
+ text-decoration: underline;
771
+ }
772
+
727
773
  /* Description body (markdown-ish) */
728
774
  .prose {
729
775
  background: var(--bg-sunken);
@@ -758,6 +804,135 @@ a {
758
804
  margin-bottom: 0;
759
805
  }
760
806
 
807
+ /* Rendered markdown body */
808
+ .markdown {
809
+ background: var(--bg-sunken);
810
+ border: 1px solid var(--border);
811
+ border-radius: var(--radius);
812
+ padding: var(--sp-4) var(--sp-5);
813
+ font-size: var(--text-md);
814
+ line-height: 1.6;
815
+ color: var(--gray-800);
816
+ }
817
+ .markdown > :first-child {
818
+ margin-top: 0;
819
+ }
820
+ .markdown > :last-child {
821
+ margin-bottom: 0;
822
+ }
823
+ .markdown p {
824
+ margin: 0 0 10px;
825
+ }
826
+ .markdown h1,
827
+ .markdown h2,
828
+ .markdown h3,
829
+ .markdown h4,
830
+ .markdown h5,
831
+ .markdown h6 {
832
+ margin: 18px 0 8px;
833
+ font-weight: 600;
834
+ line-height: 1.3;
835
+ }
836
+ .markdown h1 {
837
+ font-size: 1.5em;
838
+ border-bottom: 1px solid var(--border);
839
+ padding-bottom: 4px;
840
+ }
841
+ .markdown h2 {
842
+ font-size: 1.3em;
843
+ border-bottom: 1px solid var(--border);
844
+ padding-bottom: 3px;
845
+ }
846
+ .markdown h3 {
847
+ font-size: 1.15em;
848
+ }
849
+ .markdown h4 {
850
+ font-size: 1em;
851
+ }
852
+ .markdown h5,
853
+ .markdown h6 {
854
+ font-size: 0.95em;
855
+ color: var(--text-subtle);
856
+ }
857
+ .markdown ul,
858
+ .markdown ol {
859
+ margin: 0 0 10px;
860
+ padding-left: 24px;
861
+ }
862
+ .markdown li {
863
+ margin: 2px 0;
864
+ }
865
+ .markdown li > ul,
866
+ .markdown li > ol {
867
+ margin: 2px 0;
868
+ }
869
+ .markdown a {
870
+ color: var(--accent);
871
+ text-decoration: underline;
872
+ }
873
+ .markdown code {
874
+ font-family: var(--font-mono);
875
+ font-size: 0.9em;
876
+ background: var(--gray-200);
877
+ padding: 1px 5px;
878
+ border-radius: 3px;
879
+ }
880
+ .markdown pre {
881
+ margin: 0 0 10px;
882
+ padding: 10px 12px;
883
+ background: var(--gray-200);
884
+ border: 1px solid var(--border);
885
+ border-radius: var(--radius);
886
+ overflow-x: auto;
887
+ font-size: 0.9em;
888
+ line-height: 1.5;
889
+ }
890
+ .markdown pre code {
891
+ padding: 0;
892
+ background: transparent;
893
+ border-radius: 0;
894
+ font-size: 1em;
895
+ }
896
+ .markdown blockquote {
897
+ margin: 0 0 10px;
898
+ padding: 2px 12px;
899
+ border-left: 3px solid var(--border);
900
+ color: var(--text-subtle);
901
+ }
902
+ .markdown blockquote > :last-child {
903
+ margin-bottom: 0;
904
+ }
905
+ .markdown hr {
906
+ border: 0;
907
+ border-top: 1px solid var(--border);
908
+ margin: 16px 0;
909
+ }
910
+ .markdown img {
911
+ max-width: 100%;
912
+ height: auto;
913
+ }
914
+ .markdown table {
915
+ border-collapse: collapse;
916
+ margin: 0 0 10px;
917
+ font-size: 0.95em;
918
+ }
919
+ .markdown th,
920
+ .markdown td {
921
+ border: 1px solid var(--border);
922
+ padding: 6px 10px;
923
+ text-align: left;
924
+ }
925
+ .markdown th {
926
+ background: var(--gray-200);
927
+ font-weight: 600;
928
+ }
929
+ .markdown em {
930
+ font-style: italic;
931
+ }
932
+ .markdown strong {
933
+ font-weight: 600;
934
+ }
935
+
761
936
  /* Prereq + log lists */
762
937
  .prereq-list,
763
938
  .log-list {
@@ -17,6 +17,7 @@ export declare class LocalRepository implements Repository {
17
17
  getObjects(includeClosed?: boolean, scope?: string, type?: TrellisObjectType | TrellisObjectType[], status?: TrellisObjectStatus | TrellisObjectStatus[], priority?: TrellisObjectPriority | TrellisObjectPriority[]): Promise<TrellisObject[]>;
18
18
  getChildrenOf(parentId: string, includeClosed?: boolean): Promise<TrellisObject[]>;
19
19
  saveObject(trellisObject: TrellisObject): Promise<void>;
20
+ getObjectFilePath(id: string): Promise<string | null>;
20
21
  deleteObject(id: string, force?: boolean): Promise<void>;
21
22
  getAttachmentsFolder(obj: TrellisObject): Promise<string>;
22
23
  listAttachments(obj: TrellisObject): Promise<string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"LocalRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/LocalRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAMpC,OAAO,CAAC,MAAM;IAL1B;;;;OAIG;gBACiB,MAAM,EAAE,YAAY;IAQlC,aAAa,CAAC,EAAE,EAAE,MAAM;IAKxB,UAAU,CACd,aAAa,CAAC,EAAE,OAAO,EACvB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EAC9C,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,EACpD,QAAQ,CAAC,EAAE,qBAAqB,GAAG,qBAAqB,EAAE;IAatD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO;IASvD,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzD,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtD,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/D,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIpE"}
1
+ {"version":3,"file":"LocalRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/LocalRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAMpC,OAAO,CAAC,MAAM;IAL1B;;;;OAIG;gBACiB,MAAM,EAAE,YAAY;IAQlC,aAAa,CAAC,EAAE,EAAE,MAAM;IAKxB,UAAU,CACd,aAAa,CAAC,EAAE,OAAO,EACvB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EAC9C,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,EACpD,QAAQ,CAAC,EAAE,qBAAqB,GAAG,qBAAqB,EAAE;IAatD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO;IASvD,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUrD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzD,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtD,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/D,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIpE"}
@@ -71,6 +71,15 @@ class LocalRepository {
71
71
  const { RepoIndex } = await Promise.resolve().then(() => __importStar(require("./RepoIndex")));
72
72
  RepoIndex.invalidate(this.config.planningRootFolder, trellisObject.id);
73
73
  }
74
+ async getObjectFilePath(id) {
75
+ const { RepoIndex } = await Promise.resolve().then(() => __importStar(require("./RepoIndex")));
76
+ let entry = await RepoIndex.lookup(this.config.planningRootFolder, id);
77
+ if (!entry) {
78
+ await RepoIndex.populate(this.config.planningRootFolder);
79
+ entry = await RepoIndex.lookup(this.config.planningRootFolder, id);
80
+ }
81
+ return entry?.filePath ?? null;
82
+ }
74
83
  async deleteObject(id, force) {
75
84
  const { deleteObjectById } = await Promise.resolve().then(() => __importStar(require("./deleteObjectById")));
76
85
  await deleteObjectById(id, this.config.planningRootFolder, force);
@@ -1 +1 @@
1
- {"version":3,"file":"LocalRepository.js","sourceRoot":"","sources":["../../../src/repositories/local/LocalRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalRepository.js","sourceRoot":"","sources":["../../../src/repositories/local/LocalRepository.ts"],"names":[],"mappings":"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"}
@@ -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"}