@knowsuchagency/fulcrum 3.14.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/fulcrum.js CHANGED
@@ -44497,7 +44497,9 @@ function registerListTasks(server, client) {
44497
44497
  search: exports_external.optional(exports_external.string()).describe("Case-insensitive substring search across title, tags, and project name"),
44498
44498
  dueDateStart: exports_external.optional(exports_external.string()).describe("Start of date range (YYYY-MM-DD, inclusive)"),
44499
44499
  dueDateEnd: exports_external.optional(exports_external.string()).describe("End of date range (YYYY-MM-DD, inclusive)"),
44500
- overdue: exports_external.optional(exports_external.boolean()).describe("Only show overdue tasks (due date in past, not DONE/CANCELED)")
44500
+ overdue: exports_external.optional(exports_external.boolean()).describe("Only show overdue tasks (due date in past, not DONE/CANCELED)"),
44501
+ sort: exports_external.optional(exports_external.enum(["position", "created", "updated"])).describe('Sort order: "position" (default), "created" (newest first), "updated" (most recently updated first)'),
44502
+ limit: exports_external.optional(exports_external.number().int().min(1).max(100)).describe("Return only the first N results after filtering/sorting (1-100)")
44501
44503
  }, async ({
44502
44504
  status,
44503
44505
  statuses,
@@ -44509,7 +44511,9 @@ function registerListTasks(server, client) {
44509
44511
  search,
44510
44512
  dueDateStart,
44511
44513
  dueDateEnd,
44512
- overdue
44514
+ overdue,
44515
+ sort,
44516
+ limit
44513
44517
  }) => {
44514
44518
  try {
44515
44519
  let tasks = await client.listTasks();
@@ -44572,6 +44576,14 @@ function registerListTasks(server, client) {
44572
44576
  const today = getTodayInTimezone(timezone);
44573
44577
  tasks = tasks.filter((t2) => t2.dueDate && t2.dueDate < today && t2.status !== "DONE" && t2.status !== "CANCELED");
44574
44578
  }
44579
+ if (sort === "created") {
44580
+ tasks.sort((a2, b2) => new Date(b2.createdAt).getTime() - new Date(a2.createdAt).getTime());
44581
+ } else if (sort === "updated") {
44582
+ tasks.sort((a2, b2) => new Date(b2.updatedAt).getTime() - new Date(a2.updatedAt).getTime());
44583
+ }
44584
+ if (limit) {
44585
+ tasks = tasks.slice(0, limit);
44586
+ }
44575
44587
  return formatSuccess(tasks);
44576
44588
  } catch (err) {
44577
44589
  return handleToolError(err);
@@ -44730,6 +44742,20 @@ function registerAddTaskTag(server, client) {
44730
44742
  }
44731
44743
  });
44732
44744
  }
44745
+ function registerMoveTask(server, client) {
44746
+ server.tool("move_task", "Move a task to a different status column", {
44747
+ id: exports_external.string().describe("Task ID"),
44748
+ status: TaskStatusSchema2.describe("Target status"),
44749
+ position: exports_external.optional(exports_external.number()).describe("Position in the column (0-indexed, defaults to end)")
44750
+ }, async ({ id, status, position }) => {
44751
+ try {
44752
+ const task = await client.moveTask(id, status, position);
44753
+ return formatSuccess(task);
44754
+ } catch (err) {
44755
+ return handleToolError(err);
44756
+ }
44757
+ });
44758
+ }
44733
44759
  function registerSetTaskDueDate(server, client) {
44734
44760
  server.tool("set_task_due_date", "Set or clear the due date for a task", {
44735
44761
  taskId: exports_external.string().describe("Task ID"),
@@ -44776,18 +44802,7 @@ var registerTaskTools = (server, client) => {
44776
44802
  return handleToolError(err);
44777
44803
  }
44778
44804
  });
44779
- server.tool("move_task", "Move a task to a different status column", {
44780
- id: exports_external.string().describe("Task ID"),
44781
- status: TaskStatusSchema2.describe("Target status"),
44782
- position: exports_external.optional(exports_external.number()).describe("Position in the column (0-indexed, defaults to end)")
44783
- }, async ({ id, status, position }) => {
44784
- try {
44785
- const task = await client.moveTask(id, status, position);
44786
- return formatSuccess(task);
44787
- } catch (err) {
44788
- return handleToolError(err);
44789
- }
44790
- });
44805
+ registerMoveTask(server, client);
44791
44806
  server.tool("remove_task_link", "Remove a URL link from a task", {
44792
44807
  taskId: exports_external.string().describe("Task ID"),
44793
44808
  linkId: exports_external.string().describe("Link ID to remove")
@@ -46451,7 +46466,7 @@ async function runMcpServer(urlOverride, portOverride) {
46451
46466
  const client = new FulcrumClient(urlOverride, portOverride);
46452
46467
  const server = new McpServer({
46453
46468
  name: "fulcrum",
46454
- version: "3.14.0"
46469
+ version: "3.15.0"
46455
46470
  });
46456
46471
  registerTools(server, client);
46457
46472
  const transport = new StdioServerTransport;
@@ -48800,7 +48815,7 @@ var marketplace_default = `{
48800
48815
  "name": "fulcrum",
48801
48816
  "source": "./",
48802
48817
  "description": "Task orchestration for Claude Code",
48803
- "version": "3.14.0",
48818
+ "version": "3.15.0",
48804
48819
  "skills": [
48805
48820
  "./skills/fulcrum"
48806
48821
  ],
@@ -50004,7 +50019,7 @@ function compareVersions(v1, v2) {
50004
50019
  var package_default = {
50005
50020
  name: "@knowsuchagency/fulcrum",
50006
50021
  private: true,
50007
- version: "3.14.0",
50022
+ version: "3.15.0",
50008
50023
  description: "Harness Attention. Orchestrate Agents. Ship.",
50009
50024
  license: "PolyForm-Perimeter-1.0.0",
50010
50025
  type: "module",