@knowsuchagency/fulcrum 3.14.0 → 3.15.1

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.1"
46455
46470
  });
46456
46471
  registerTools(server, client);
46457
46472
  const transport = new StdioServerTransport;
@@ -48124,7 +48139,7 @@ var currentTaskLinkCommand = defineCommand({
48124
48139
  meta: { name: "link", description: "Manage task links" },
48125
48140
  args: {
48126
48141
  ...globalArgs,
48127
- url: { type: "positional", description: "URL to add (or --remove <id>)" },
48142
+ linkUrl: { type: "positional", description: "URL to add (or --remove <id>)" },
48128
48143
  label: { type: "string", description: "Display label for the link" },
48129
48144
  remove: { type: "string", alias: "r", description: "Remove link by URL or ID" },
48130
48145
  path: { type: "string", description: "Path override (default: cwd)" }
@@ -48134,8 +48149,8 @@ var currentTaskLinkCommand = defineCommand({
48134
48149
  const rest = [];
48135
48150
  if (args.remove) {
48136
48151
  rest.push("--remove", args.remove);
48137
- } else if (args.url) {
48138
- rest.push(args.url);
48152
+ } else if (args.linkUrl) {
48153
+ rest.push(args.linkUrl);
48139
48154
  }
48140
48155
  await handleCurrentTaskCommand("link", rest, toFlags(args));
48141
48156
  }
@@ -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.1",
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.1",
50008
50023
  description: "Harness Attention. Orchestrate Agents. Ship.",
50009
50024
  license: "PolyForm-Perimeter-1.0.0",
50010
50025
  type: "module",
@@ -50020,7 +50035,7 @@ var package_default = {
50020
50035
  "db:studio": "drizzle-kit studio"
50021
50036
  },
50022
50037
  dependencies: {
50023
- "@anthropic-ai/claude-agent-sdk": "0.x",
50038
+ "@anthropic-ai/claude-agent-sdk": "0.2.42",
50024
50039
  "@atlaskit/pragmatic-drag-and-drop": "^1.7.7",
50025
50040
  "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
50026
50041
  "@azurity/pure-nerd-font": "^3.0.5",