@langadventurellc/task-trellis-mcp 2.7.0 → 2.8.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.
@@ -79,6 +79,26 @@ describe("renderTreeFragment", () => {
79
79
  expect(html).not.toContain("T-done-child");
80
80
  expect(html).toContain("F-open");
81
81
  });
82
+ it("with hideCompleted:true keeps closed descendants of an open root", () => {
83
+ const openRoot = makeObj({
84
+ id: "F-open",
85
+ type: models_1.TrellisObjectType.FEATURE,
86
+ title: "Open Feature",
87
+ childrenIds: ["T-done-child"],
88
+ parent: null,
89
+ });
90
+ const doneChild = makeObj({
91
+ id: "T-done-child",
92
+ title: "Done Child Task",
93
+ status: models_1.TrellisObjectStatus.DONE,
94
+ parent: "F-open",
95
+ });
96
+ const html = (0, renderTreeFragment_1.renderTreeFragment)("my-proj", [openRoot, doneChild], {
97
+ hideCompleted: true,
98
+ });
99
+ expect(html).toContain("F-open");
100
+ expect(html).toContain("T-done-child");
101
+ });
82
102
  it("falls back to computeInitialOpenSet when openSet is omitted", () => {
83
103
  // F-parent has an in-progress child → computeInitialOpenSet will include F-parent
84
104
  const parent = makeObj({
@@ -1 +1 @@
1
- {"version":3,"file":"renderTreeFragment.test.js","sourceRoot":"","sources":["../../../../src/http/projectTreePage/__tests__/renderTreeFragment.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderTreeFragment.test.js","sourceRoot":"","sources":["../../../../src/http/projectTreePage/__tests__/renderTreeFragment.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { TrellisObject } from "../../models";
2
2
  /** Renders the hierarchical tree. Ancestors of in-progress issues start expanded; everything else collapsed.
3
- * Supply `options.openSet` to override which rows start open. Pass `options.hideCompleted: true` to prune done/wont-do subtrees before rendering. */
3
+ * Supply `options.openSet` to override which rows start open. Pass `options.hideCompleted: true` to hide closed top-level issues (their descendants come along). */
4
4
  export declare function renderTreeFragment(key: string, objects: TrellisObject[], options?: {
5
5
  openSet?: Set<string>;
6
6
  hideCompleted?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"renderTreeFragment.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderTreeFragment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAsClD;qJACqJ;AACrJ,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,MAAM,CAkBR"}
1
+ {"version":3,"file":"renderTreeFragment.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderTreeFragment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAsClD;oKACoK;AACpK,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,MAAM,CAiBR"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.renderTreeFragment = renderTreeFragment;
4
+ const models_1 = require("../../models");
4
5
  const computeInitialOpenSet_1 = require("./computeInitialOpenSet");
5
- const pruneCompletedSubtrees_1 = require("./pruneCompletedSubtrees");
6
6
  const treeRow_1 = require("./treeRow");
7
7
  function buildNodes(key, objectMap, openSet, ids, depth, parentOpen) {
8
8
  return ids
@@ -22,14 +22,11 @@ function buildNodes(key, objectMap, openSet, ids, depth, parentOpen) {
22
22
  .join("\n");
23
23
  }
24
24
  /** Renders the hierarchical tree. Ancestors of in-progress issues start expanded; everything else collapsed.
25
- * Supply `options.openSet` to override which rows start open. Pass `options.hideCompleted: true` to prune done/wont-do subtrees before rendering. */
25
+ * Supply `options.openSet` to override which rows start open. Pass `options.hideCompleted: true` to hide closed top-level issues (their descendants come along). */
26
26
  function renderTreeFragment(key, objects, options) {
27
- const visible = options?.hideCompleted
28
- ? (0, pruneCompletedSubtrees_1.pruneCompletedSubtrees)(objects)
29
- : objects;
30
- const objectMap = new Map(visible.map((o) => [o.id, o]));
31
- const roots = visible.filter((o) => o.parent === null);
32
- const openSet = options?.openSet ?? (0, computeInitialOpenSet_1.computeInitialOpenSet)(visible);
27
+ const objectMap = new Map(objects.map((o) => [o.id, o]));
28
+ const roots = objects.filter((o) => o.parent === null && (!options?.hideCompleted || !(0, models_1.isClosed)(o)));
29
+ const openSet = options?.openSet ?? (0, computeInitialOpenSet_1.computeInitialOpenSet)(objects);
33
30
  const html = buildNodes(key, objectMap, openSet, roots.map((r) => r.id), 0, true);
34
31
  return (html || '<p class="empty" style="padding:12px 16px;">No issues found.</p>');
35
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderTreeFragment.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderTreeFragment.ts"],"names":[],"mappings":";;AAwCA,gDAsBC;AA7DD,mEAAgE;AAChE,qEAAkE;AAClE,uCAAoC;AAEpC,SAAS,UAAU,CACjB,GAAW,EACX,SAAqC,EACrC,OAAoB,EACpB,GAAa,EACb,KAAa,EACb,UAAmB;IAEnB,OAAO,GAAG;SACP,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACV,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAA,iBAAO,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;YACvC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,CAAC,UAAU;SACpB,CAAC,CAAC;QACH,MAAM,YAAY,GAChB,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,UAAU,CACR,GAAG,EACH,SAAS,EACT,OAAO,EACP,GAAG,CAAC,WAAW,EACf,KAAK,GAAG,CAAC,EACT,MAAM,CACP;YACH,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,OAAO,GAAG,YAAY,CAAC;IAChC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;qJACqJ;AACrJ,SAAgB,kBAAkB,CAChC,GAAW,EACX,OAAwB,EACxB,OAA4D;IAE5D,MAAM,OAAO,GAAG,OAAO,EAAE,aAAa;QACpC,CAAC,CAAC,IAAA,+CAAsB,EAAC,OAAO,CAAC;QACjC,CAAC,CAAC,OAAO,CAAC;IACZ,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAA,6CAAqB,EAAC,OAAO,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,UAAU,CACrB,GAAG,EACH,SAAS,EACT,OAAO,EACP,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACtB,CAAC,EACD,IAAI,CACL,CAAC;IACF,OAAO,CACL,IAAI,IAAI,kEAAkE,CAC3E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"renderTreeFragment.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderTreeFragment.ts"],"names":[],"mappings":";;AAwCA,gDAqBC;AA5DD,yCAAwC;AACxC,mEAAgE;AAChE,uCAAoC;AAEpC,SAAS,UAAU,CACjB,GAAW,EACX,SAAqC,EACrC,OAAoB,EACpB,GAAa,EACb,KAAa,EACb,UAAmB;IAEnB,OAAO,GAAG;SACP,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACV,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAA,iBAAO,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;YACvC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,CAAC,UAAU;SACpB,CAAC,CAAC;QACH,MAAM,YAAY,GAChB,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,UAAU,CACR,GAAG,EACH,SAAS,EACT,OAAO,EACP,GAAG,CAAC,WAAW,EACf,KAAK,GAAG,CAAC,EACT,MAAM,CACP;YACH,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,OAAO,GAAG,YAAY,CAAC;IAChC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;oKACoK;AACpK,SAAgB,kBAAkB,CAChC,GAAW,EACX,OAAwB,EACxB,OAA4D;IAE5D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,IAAI,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CACtE,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAA,6CAAqB,EAAC,OAAO,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,UAAU,CACrB,GAAG,EACH,SAAS,EACT,OAAO,EACP,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACtB,CAAC,EACD,IAAI,CACL,CAAC;IACF,OAAO,CACL,IAAI,IAAI,kEAAkE,CAC3E,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langadventurellc/task-trellis-mcp",
3
- "version": "2.7.0",
3
+ "version": "2.8.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": {
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pruneCompletedSubtrees.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pruneCompletedSubtrees.test.d.ts","sourceRoot":"","sources":["../../../../src/http/projectTreePage/__tests__/pruneCompletedSubtrees.test.ts"],"names":[],"mappings":""}
@@ -1,77 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const models_1 = require("../../../models");
4
- const pruneCompletedSubtrees_1 = require("../pruneCompletedSubtrees");
5
- function makeObj(overrides = {}) {
6
- return {
7
- id: "T-test",
8
- type: models_1.TrellisObjectType.TASK,
9
- title: "Test Task",
10
- status: models_1.TrellisObjectStatus.OPEN,
11
- priority: models_1.TrellisObjectPriority.MEDIUM,
12
- parent: null,
13
- prerequisites: [],
14
- affectedFiles: new Map(),
15
- log: [],
16
- schema: "v1.0",
17
- childrenIds: [],
18
- created: "2026-01-01T00:00:00Z",
19
- updated: "2026-01-01T00:00:00Z",
20
- body: "",
21
- ...overrides,
22
- };
23
- }
24
- describe("pruneCompletedSubtrees", () => {
25
- it("removes a done root and all its descendants, even if descendants are open or in-progress", () => {
26
- const root = makeObj({
27
- id: "F-done",
28
- type: models_1.TrellisObjectType.FEATURE,
29
- status: models_1.TrellisObjectStatus.DONE,
30
- childrenIds: ["T-open", "T-progress"],
31
- });
32
- const open = makeObj({ id: "T-open", parent: "F-done" });
33
- const progress = makeObj({
34
- id: "T-progress",
35
- status: models_1.TrellisObjectStatus.IN_PROGRESS,
36
- parent: "F-done",
37
- });
38
- const other = makeObj({ id: "T-other" });
39
- const result = (0, pruneCompletedSubtrees_1.pruneCompletedSubtrees)([root, open, progress, other]);
40
- const ids = result.map((o) => o.id);
41
- expect(ids).not.toContain("F-done");
42
- expect(ids).not.toContain("T-open");
43
- expect(ids).not.toContain("T-progress");
44
- expect(ids).toContain("T-other");
45
- });
46
- it("removes a wont-do subtree the same way", () => {
47
- const root = makeObj({
48
- id: "F-wontdo",
49
- type: models_1.TrellisObjectType.FEATURE,
50
- status: models_1.TrellisObjectStatus.WONT_DO,
51
- childrenIds: ["T-child"],
52
- });
53
- const child = makeObj({ id: "T-child", parent: "F-wontdo" });
54
- const result = (0, pruneCompletedSubtrees_1.pruneCompletedSubtrees)([root, child]);
55
- expect(result).toHaveLength(0);
56
- });
57
- it("keeps non-closed roots and their subtrees intact", () => {
58
- const root = makeObj({
59
- id: "F-open",
60
- type: models_1.TrellisObjectType.FEATURE,
61
- status: models_1.TrellisObjectStatus.OPEN,
62
- childrenIds: ["T-child"],
63
- });
64
- const child = makeObj({ id: "T-child", parent: "F-open" });
65
- const inProgress = makeObj({
66
- id: "T-progress",
67
- status: models_1.TrellisObjectStatus.IN_PROGRESS,
68
- });
69
- const result = (0, pruneCompletedSubtrees_1.pruneCompletedSubtrees)([root, child, inProgress]);
70
- const ids = result.map((o) => o.id);
71
- expect(ids).toContain("F-open");
72
- expect(ids).toContain("T-child");
73
- expect(ids).toContain("T-progress");
74
- expect(result).toHaveLength(3);
75
- });
76
- });
77
- //# sourceMappingURL=pruneCompletedSubtrees.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pruneCompletedSubtrees.test.js","sourceRoot":"","sources":["../../../../src/http/projectTreePage/__tests__/pruneCompletedSubtrees.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { TrellisObject } from "../../models";
2
- /** Removes closed (done/wont-do) subtrees and all their descendants from the object list. */
3
- export declare function pruneCompletedSubtrees(objects: TrellisObject[]): TrellisObject[];
4
- //# sourceMappingURL=pruneCompletedSubtrees.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pruneCompletedSubtrees.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/pruneCompletedSubtrees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,6FAA6F;AAC7F,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EAAE,GACvB,aAAa,EAAE,CAqBjB"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pruneCompletedSubtrees = pruneCompletedSubtrees;
4
- const models_1 = require("../../models");
5
- /** Removes closed (done/wont-do) subtrees and all their descendants from the object list. */
6
- function pruneCompletedSubtrees(objects) {
7
- const byId = new Map(objects.map((o) => [o.id, o]));
8
- const blocked = new Set();
9
- function collect(id) {
10
- if (blocked.has(id))
11
- return;
12
- blocked.add(id);
13
- const obj = byId.get(id);
14
- if (!obj)
15
- return;
16
- for (const childId of obj.childrenIds) {
17
- collect(childId);
18
- }
19
- }
20
- for (const o of objects) {
21
- if ((0, models_1.isClosed)(o)) {
22
- collect(o.id);
23
- }
24
- }
25
- return objects.filter((o) => !blocked.has(o.id));
26
- }
27
- //# sourceMappingURL=pruneCompletedSubtrees.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pruneCompletedSubtrees.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/pruneCompletedSubtrees.ts"],"names":[],"mappings":";;AAIA,wDAuBC;AA1BD,yCAAwC;AAExC,6FAA6F;AAC7F,SAAgB,sBAAsB,CACpC,OAAwB;IAExB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,OAAO,CAAC,EAAU;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,IAAA,iBAAQ,EAAC,CAAC,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC"}