@knowsuchagency/fulcrum 1.13.0 → 1.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
@@ -1123,9 +1123,10 @@ class FulcrumClient {
1123
1123
  return this.fetch("/api/config/notifications");
1124
1124
  }
1125
1125
  async updateNotifications(updates) {
1126
+ const current = await this.getNotifications();
1126
1127
  return this.fetch("/api/config/notifications", {
1127
1128
  method: "PUT",
1128
- body: JSON.stringify(updates)
1129
+ body: JSON.stringify({ ...updates, _updatedAt: current._updatedAt })
1129
1130
  });
1130
1131
  }
1131
1132
  async testNotification(channel) {
@@ -43764,6 +43765,24 @@ var init_registry = __esm(() => {
43764
43765
  ];
43765
43766
  });
43766
43767
 
43768
+ // shared/date-utils.ts
43769
+ function getTodayInTimezone(timezone) {
43770
+ const now = new Date;
43771
+ if (!timezone) {
43772
+ const year = now.getFullYear();
43773
+ const month = String(now.getMonth() + 1).padStart(2, "0");
43774
+ const day = String(now.getDate()).padStart(2, "0");
43775
+ return `${year}-${month}-${day}`;
43776
+ }
43777
+ const formatter = new Intl.DateTimeFormat("en-CA", {
43778
+ timeZone: timezone,
43779
+ year: "numeric",
43780
+ month: "2-digit",
43781
+ day: "2-digit"
43782
+ });
43783
+ return formatter.format(now);
43784
+ }
43785
+
43767
43786
  // cli/src/mcp/tools.ts
43768
43787
  import { basename as basename2 } from "path";
43769
43788
  function registerTools(server, client) {
@@ -43860,7 +43879,9 @@ function registerTools(server, client) {
43860
43879
  tasks = tasks.filter((t2) => t2.dueDate && t2.dueDate <= dueDateEnd);
43861
43880
  }
43862
43881
  if (overdue) {
43863
- const today = new Date().toISOString().split("T")[0];
43882
+ const config3 = await client.getConfig("appearance.timezone");
43883
+ const timezone = config3?.value ?? null;
43884
+ const today = getTodayInTimezone(timezone);
43864
43885
  tasks = tasks.filter((t2) => t2.dueDate && t2.dueDate < today && t2.status !== "DONE" && t2.status !== "CANCELED");
43865
43886
  }
43866
43887
  return formatSuccess(tasks);
@@ -43888,7 +43909,7 @@ function registerTools(server, client) {
43888
43909
  baseBranch: exports_external.string().default("main").describe("Base branch for the worktree"),
43889
43910
  branch: exports_external.optional(exports_external.string()).describe("Branch name for the task worktree (auto-generated if omitted)"),
43890
43911
  description: exports_external.optional(exports_external.string()).describe("Task description"),
43891
- status: exports_external.optional(TaskStatusSchema2).describe("Initial status (default: IN_PROGRESS, use TO_DO for deferred worktree creation)"),
43912
+ status: exports_external.optional(TaskStatusSchema2).describe("Initial status (default: TO_DO, use IN_PROGRESS for immediate worktree creation)"),
43892
43913
  projectId: exports_external.optional(exports_external.string()).describe("Project ID to associate with"),
43893
43914
  repositoryId: exports_external.optional(exports_external.string()).describe("Repository ID (alternative to repoPath)"),
43894
43915
  tags: exports_external.optional(exports_external.array(exports_external.string())).describe("Tags to add to the task"),
@@ -43904,7 +43925,7 @@ function registerTools(server, client) {
43904
43925
  branch: branch ?? null,
43905
43926
  worktreePath: null,
43906
43927
  description,
43907
- status: status ?? "IN_PROGRESS",
43928
+ status: status ?? "TO_DO",
43908
43929
  projectId: projectId ?? null,
43909
43930
  repositoryId: repositoryId ?? null,
43910
43931
  tags,
@@ -44322,8 +44343,10 @@ function registerTools(server, client) {
44322
44343
  }, async ({ startDate, endDate, overdue }) => {
44323
44344
  try {
44324
44345
  let tasks = await client.listTasks();
44325
- const today = new Date().toISOString().split("T")[0];
44326
44346
  if (overdue) {
44347
+ const config3 = await client.getConfig("appearance.timezone");
44348
+ const timezone = config3?.value ?? null;
44349
+ const today = getTodayInTimezone(timezone);
44327
44350
  tasks = tasks.filter((t2) => t2.dueDate && t2.dueDate < today && t2.status !== "DONE" && t2.status !== "CANCELED");
44328
44351
  } else {
44329
44352
  if (startDate) {
@@ -44735,7 +44758,7 @@ async function runMcpServer(urlOverride, portOverride) {
44735
44758
  const client = new FulcrumClient(urlOverride, portOverride);
44736
44759
  const server = new McpServer({
44737
44760
  name: "fulcrum",
44738
- version: "1.0.0"
44761
+ version: "1.15.0"
44739
44762
  });
44740
44763
  registerTools(server, client);
44741
44764
  const transport = new StdioServerTransport;
@@ -46396,12 +46419,12 @@ var currentTaskPrCommand = defineCommand({
46396
46419
  meta: { name: "pr", description: "Link a PR to current task" },
46397
46420
  args: {
46398
46421
  ...globalArgs,
46399
- url: { type: "positional", description: "PR URL", required: true },
46422
+ prUrl: { type: "positional", description: "PR URL", required: true },
46400
46423
  path: { type: "string", description: "Path override (default: cwd)" }
46401
46424
  },
46402
46425
  async run({ args }) {
46403
46426
  setupJsonOutput(args);
46404
- await handleCurrentTaskCommand("pr", [args.url], toFlags(args));
46427
+ await handleCurrentTaskCommand("pr", [args.prUrl], toFlags(args));
46405
46428
  }
46406
46429
  });
46407
46430
  var currentTaskLinkCommand = defineCommand({
@@ -47084,7 +47107,7 @@ var marketplace_default = `{
47084
47107
  "name": "fulcrum",
47085
47108
  "source": "./",
47086
47109
  "description": "Task orchestration for Claude Code",
47087
- "version": "1.13.0",
47110
+ "version": "1.15.0",
47088
47111
  "skills": [
47089
47112
  "./skills/fulcrum"
47090
47113
  ],
@@ -48272,7 +48295,7 @@ function compareVersions(v1, v2) {
48272
48295
  var package_default = {
48273
48296
  name: "@knowsuchagency/fulcrum",
48274
48297
  private: true,
48275
- version: "1.13.0",
48298
+ version: "1.15.0",
48276
48299
  description: "Harness Attention. Orchestrate Agents. Ship.",
48277
48300
  license: "PolyForm-Perimeter-1.0.0",
48278
48301
  type: "module",
@@ -48288,6 +48311,7 @@ var package_default = {
48288
48311
  "db:studio": "drizzle-kit studio"
48289
48312
  },
48290
48313
  dependencies: {
48314
+ "@modelcontextprotocol/sdk": "^1.11.0",
48291
48315
  "@atlaskit/pragmatic-drag-and-drop": "^1.7.7",
48292
48316
  "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
48293
48317
  "@azurity/pure-nerd-font": "^3.0.5",