@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 +34 -10
- package/dist/assets/{index-BiZAwxx6.js → index-B6AnSy-N.js} +132 -130
- package/dist/assets/index-D13Xo2CW.css +1 -0
- package/dist/index.html +2 -2
- package/drizzle/0039_task_relationships.sql +19 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/server/index.js +60303 -16581
- package/dist/assets/index-BKrFmyy5.css +0 -1
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
|
|
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:
|
|
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 ?? "
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|