@knowsuchagency/fulcrum 1.14.1 → 2.0.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.
Files changed (38) hide show
  1. package/README.md +64 -131
  2. package/bin/fulcrum.js +40 -9
  3. package/dist/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  4. package/dist/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  5. package/dist/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  6. package/dist/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  7. package/dist/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  8. package/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  9. package/dist/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  10. package/dist/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  11. package/dist/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  12. package/dist/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  13. package/dist/assets/ibm-plex-sans-cyrillic-ext-wght-normal-d45eAU9y.woff2 +0 -0
  14. package/dist/assets/ibm-plex-sans-cyrillic-wght-normal-BAAhND-U.woff2 +0 -0
  15. package/dist/assets/ibm-plex-sans-greek-wght-normal-CmyJS8uq.woff2 +0 -0
  16. package/dist/assets/ibm-plex-sans-latin-ext-wght-normal-CIII54If.woff2 +0 -0
  17. package/dist/assets/ibm-plex-sans-latin-wght-normal-IvpUvPa2.woff2 +0 -0
  18. package/dist/assets/ibm-plex-sans-vietnamese-wght-normal-Dg1JeJN0.woff2 +0 -0
  19. package/dist/assets/index-9GA0ie98.js +321 -0
  20. package/dist/assets/index-isWWDaNP.css +1 -0
  21. package/dist/index.html +2 -2
  22. package/drizzle/0039_task_relationships.sql +19 -0
  23. package/drizzle/0040_migrate_task_tags_to_join_table.sql +33 -0
  24. package/drizzle/0041_ai_assistant_tables.sql +43 -0
  25. package/drizzle/0042_add_dev_port_to_chat_sessions.sql +3 -0
  26. package/drizzle/0043_simplify_assistant_schema.sql +52 -0
  27. package/drizzle/0044_add_editor_content_to_chat_sessions.sql +1 -0
  28. package/drizzle/0045_add_document_fields_to_chat_sessions.sql +2 -0
  29. package/drizzle/meta/_journal.json +49 -0
  30. package/package.json +1 -1
  31. package/server/index.js +20134 -708
  32. package/dist/assets/index-BKrFmyy5.css +0 -1
  33. package/dist/assets/index-CP6BS81y.js +0 -203
  34. package/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  35. package/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  36. package/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  37. package/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  38. package/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
package/README.md CHANGED
@@ -2,70 +2,48 @@
2
2
 
3
3
  **Harness Attention. Orchestrate Agents. Leverage Your Time Wisely.**
4
4
 
5
- ![Fulcrum Kanban Board](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/tasks-kanban-board.png)
5
+ ![Fulcrum Kanban Board with AI Assistant](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/kanban-with-assistant.png)
6
6
 
7
7
  ## What It Does
8
8
 
9
- Run multiple AI coding agent sessions in parallel across isolated git worktrees. Monitor them all from one screen. Close your laptop—they keep working. Deploy to production when ready. Self-hosted and open source.
10
-
11
- Fulcrum supports **Claude Code** and **OpenCode** with per-repository and per-task agent selection.
12
-
13
- - **Full Development Lifecycle** — Develop features in isolated git worktrees, then deploy to production with Docker Compose. No context switching, no vendor lock-in.
14
- - **Parallel Agent Orchestration** — Run multiple AI agent sessions across different tasks and worktrees. See and control all sessions in one parallel view.
15
- - **Work From Anywhere** — Close your laptop—your agents keep working on your behalf. Pick up where you left off from your phone.
16
- - **Multi-Agent Support** — Choose between Claude Code and OpenCode. Set a global default, override per-repository, or select per-task.
17
- - **Open Source & Self-Hosted** — Inspect the code, run it anywhere, own your data. From a $5 VPS to your home lab.
18
-
19
- ## Key Features
20
-
21
- - **Projects** — Unified view combining repositories and app deployments with workspace terminals
22
- - **App Deployment** — Deploy with Docker Compose, automatic Traefik routing, optional Cloudflare DNS integration
23
- - **Parallel Agent Orchestration** — Run multiple AI coding agent sessions across different tasks and worktrees
24
- - **Multi-Agent Support** — Use Claude Code or OpenCode, configurable globally, per-repo, or per-task
25
- - **Work From Anywhere** — Run on a remote server; agents continue working when you disconnect
26
- - **Git Worktree Isolation** — Safe experimentation without touching your main branch
27
- - **Claude Code Plugin** — Skill for task management, automatic status sync, session continuity
28
- - **MCP Server** — 60+ tools for tasks, projects, apps, and remote execution
29
- - **Kanban Task Management** — Visual task tracking from planning to done
30
- - **Task Dependencies** — Define prerequisite tasks; visualize with dependency graph
31
- - **Task & Project Context** — Attach files, add reference links, set due dates, organize with labels
32
- - **PR Monitoring** — Track pull requests across repositories
33
- - **Linear Integration** — Sync task status with Linear tickets
34
- - **Job Scheduling** — Create and manage systemd/launchd timers from the UI
35
- - **Cross-Platform** — Desktop app (Mac, Linux) or web application
9
+ Run multiple AI coding agents in parallel across isolated git worktrees. Manage projects with tasks, dependencies, and scheduling. Deploy to production when ready. Work from anywhere—your agents keep running when you close the laptop. Self-hosted and open source.
36
10
 
37
- ## Quick Start
11
+ **Five pillars:**
38
12
 
39
- ```bash
40
- npx @knowsuchagency/fulcrum@latest up
41
- ```
13
+ - **Terminal-First Orchestration** — Run Claude Code, OpenCode, or other agents in real terminals. No abstraction layer, no wrapper APIs.
14
+ - **Work From Anywhere** — Run Fulcrum on a remote server. Kick off tasks, close your laptop, check progress from your phone. Agents keep working in the background.
15
+ - **Project Management** — Tasks with dependencies, due dates, labels, and attachments. Visual kanban boards and dependency graphs.
16
+ - **Production Deployment** — Docker Compose with automatic Traefik routing and Cloudflare DNS/tunnels.
17
+ - **MCP-First Architecture** — 60+ tools exposed via Model Context Protocol. Agents discover what they need.
18
+
19
+ ## MCP-First Architecture
42
20
 
43
- That's it! Fulcrum will:
44
- - Check for required dependencies (bun, dtach, AI agent CLI, uv)
45
- - Offer to install any that are missing
46
- - Start the server on http://localhost:7777
47
- - Show getting started tips
21
+ Everything in Fulcrum is exposed through MCP (Model Context Protocol):
48
22
 
49
- Open http://localhost:7777 in your browser.
23
+ - **60+ MCP tools** for tasks, projects, apps, repos, notifications, and remote execution
24
+ - **Smart tool discovery** — `search_tools` lets agents find relevant tools without loading everything into context
25
+ - **Integrated assistant** — Built-in AI assistant with full context of your tasks, projects, and apps
26
+ - **External agent support** — Connect Claude Desktop, Clawdbot, or any MCP-compatible agent
27
+ - **No context bloat** — Agents discover and use only the tools they need
50
28
 
51
- ### Check Your Setup
29
+ Whether you use Fulcrum's built-in assistant or an external agent like Claude Desktop, AI has seamless access to your entire workflow.
30
+
31
+ ## Quick Start
52
32
 
53
33
  ```bash
54
- fulcrum doctor
34
+ npx @knowsuchagency/fulcrum@latest up
55
35
  ```
56
36
 
57
- Shows the status of all dependencies with versions.
37
+ Fulcrum will check for dependencies (bun, dtach, AI agent CLI), offer to install any that are missing, and start the server on http://localhost:7777.
58
38
 
59
39
  ### Desktop App
60
40
 
61
- Download the desktop app for a bundled experience:
62
-
63
41
  | Platform | Download |
64
42
  |----------|----------|
65
43
  | **macOS** (Apple Silicon) | [Download DMG](https://github.com/knowsuchagency/fulcrum/releases/latest/download/Fulcrum-macos-arm64.dmg) |
66
44
  | **Linux** | [Download AppImage](https://github.com/knowsuchagency/fulcrum/releases/latest/download/Fulcrum-linux-x64.AppImage) |
67
45
 
68
- The desktop app bundles everything—just install and run. It will start the server, install the Claude Code plugin, and check for updates automatically.
46
+ The desktop app bundles everything—just install and run.
69
47
 
70
48
  <details>
71
49
  <summary>macOS Installation Notes</summary>
@@ -77,7 +55,7 @@ The desktop app bundles everything—just install and run. It will start the ser
77
55
 
78
56
  </details>
79
57
 
80
- ### Install Script (Recommended for Remote Servers)
58
+ ### Install Script (Remote Servers)
81
59
 
82
60
  For remote servers or VPS, use the install script—it auto-installs all dependencies:
83
61
 
@@ -85,8 +63,6 @@ For remote servers or VPS, use the install script—it auto-installs all depende
85
63
  curl -fsSL https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/install.sh | bash
86
64
  ```
87
65
 
88
- This installs bun, dtach, uv, Claude Code, OpenCode, GitHub CLI, Docker, cloudflared, and the fulcrum CLI + Claude Code plugin.
89
-
90
66
  ### Claude Code Plugin
91
67
 
92
68
  Install the plugin for automatic status sync and task management:
@@ -98,65 +74,66 @@ claude plugin install fulcrum@fulcrum --scope user
98
74
 
99
75
  ## Features
100
76
 
101
- ### Kanban Board
77
+ ### Kanban Board & AI Assistant
78
+
79
+ Track tasks from planning to done. The built-in AI assistant has full context of everything you're tracking—tasks, projects, apps—and can help with planning, documentation, or running MCP tools.
102
80
 
103
- Track tasks from planning to done. Create tasks that automatically spin up isolated git worktrees, and watch their status update in real-time as you work with your AI agents.
81
+ ![Kanban Board with AI Assistant](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/kanban-with-assistant.png)
104
82
 
105
- ![Kanban Board](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/tasks-kanban-board.png)
83
+ ### Parallel Agent Orchestration
106
84
 
107
- ### Task Terminals View
85
+ Run multiple AI coding agents simultaneously across different tasks. Each task gets an isolated git worktree. Monitor and interact with all sessions from one screen.
108
86
 
109
- See all your AI agent sessions across every task in a single parallel view. Each task creates an isolated git worktree on-demand, and you can monitor and interact with all sessions simultaneously.
87
+ ![Parallel Agent Terminals](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/parallel-agent-terminals.png)
110
88
 
111
- ![Task Terminals View](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/terminals-view-with-tests.png)
89
+ ### Projects
112
90
 
113
- ### App Deployment
91
+ Unified view of repositories and deployments. Link repos, manage tasks, configure default agents, and see active work at a glance.
114
92
 
115
- Deploy applications directly from Fulcrum with Docker Compose. Edit compose files inline, configure environment variables, and manage services with automatic Traefik routing and optional Cloudflare DNS integration.
93
+ ![Projects List](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/projects-list.png)
116
94
 
117
- ![App Deployment](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/app-deployment-config.png)
95
+ ### Project Workspace
118
96
 
119
- ### Projects
97
+ Terminal with integrated file browser. Direct access to project files alongside your agent sessions.
120
98
 
121
- Projects unify your code repositories and app deployments into a single entity. Manage workspace terminals, task settings, and deployment configuration from one place.
99
+ ![Project Workspace](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/project-workspace.png)
122
100
 
123
- ![Projects](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/repositories-view.png)
101
+ ### Task Dependencies
124
102
 
125
- ### Browser Preview
103
+ Define prerequisite tasks that must complete before others can start. Visualize with an interactive dependency graph.
126
104
 
127
- Preview your app alongside the agent terminal in a split-pane view. Watch changes in real-time as your AI agent iterates on your code.
105
+ ![Task Dependency Graph](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/task-dependency-graph.png)
128
106
 
129
- ![Browser Preview](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/browser-preview-split-view.png)
107
+ ### AI Assistant
108
+
109
+ Create documents with live preview. Generate charts and visualizations. The assistant uses the same MCP tools available to external agents.
110
+
111
+ ![AI Assistant Editor](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/assistant-editor.png)
130
112
 
131
113
  ### System Monitoring
132
114
 
133
- Keep an eye on system resources while your agents work. CPU, memory, and disk usage at a glance. The Jobs tab lets you create and manage systemd (Linux) or launchd (macOS) timers.
115
+ Track CPU, memory, and disk usage while your agents work. The Jobs tab manages systemd (Linux) or launchd (macOS) timers.
134
116
 
135
- ![System Monitoring](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/monitoring-system-metrics.png)
117
+ ![System Monitoring](https://raw.githubusercontent.com/knowsuchagency/fulcrum/main/screenshots/system-monitoring.png)
136
118
 
137
119
  ## Supported Agents
138
120
 
139
- Fulcrum supports multiple AI coding agents:
140
-
141
121
  | Agent | Description |
142
122
  |-------|-------------|
143
123
  | **Claude Code** | Anthropic's CLI coding agent with deep MCP integration |
144
124
  | **OpenCode** | Open-source coding agent with GPT-4 and other model support |
145
125
 
146
- Configure your default agent globally in settings, override per-repository, or select per-task when creating new tasks.
126
+ Configure your default agent globally, per-repository, or per-task.
147
127
 
148
128
  ## Claude Code Plugin
149
129
 
150
- The Fulcrum plugin for Claude Code enables seamless integration:
130
+ The Fulcrum plugin enables seamless integration:
151
131
 
152
132
  - **Automatic Status Sync** — Task moves to "In Review" when Claude stops, "In Progress" when you respond
153
- - **Session Continuity** — Claude sessions are tied to task IDs
133
+ - **Session Continuity** — Sessions tied to task IDs
154
134
  - **MCP Server** — Task management tools available directly to Claude
155
- - **Fulcrum Skill** — CLI documentation for task management (see `plugins/fulcrum/skills/`)
156
135
  - **Slash Commands** — `/review`, `/pr`, `/notify`, `/linear`, `/task-info`
157
136
 
158
- The plugin is automatically installed when Fulcrum starts. To install manually:
159
-
160
137
  ```bash
161
138
  claude plugin marketplace add knowsuchagency/fulcrum
162
139
  claude plugin install fulcrum@fulcrum --scope user
@@ -164,12 +141,6 @@ claude plugin install fulcrum@fulcrum --scope user
164
141
 
165
142
  ## OpenCode Integration
166
143
 
167
- The Fulcrum plugin for OpenCode enables seamless integration:
168
-
169
- - **Automatic Status Sync** — Task moves to "In Review" when OpenCode stops, "In Progress" when you respond
170
- - **Session Continuity** — OpenCode sessions are tied to task IDs
171
- - **MCP Server** — Task management tools available directly to OpenCode
172
-
173
144
  ```bash
174
145
  fulcrum opencode install # Install plugin + MCP server
175
146
  fulcrum opencode uninstall # Remove both
@@ -177,7 +148,7 @@ fulcrum opencode uninstall # Remove both
177
148
 
178
149
  ## MCP Tools
179
150
 
180
- Both Claude Code and OpenCode plugins include an MCP server with 60+ tools for task management, project organization, app deployment, and remote execution:
151
+ Both plugins include an MCP server with 60+ tools:
181
152
 
182
153
  | Category | Description |
183
154
  |----------|-------------|
@@ -207,11 +178,9 @@ For Claude Desktop, add to your `claude_desktop_config.json`:
207
178
 
208
179
  ## Remote Server Setup
209
180
 
210
- Run the backend on a remote server and connect from anywhere. Launch tasks, close your laptop, and your agents keep working. As AI becomes more capable of autonomous work, this becomes essential.
181
+ Run the backend on a remote server and connect from anywhere. Launch tasks, close your laptop, and your agents keep working.
211
182
 
212
- ### Desktop App: SSH Port Forwarding (Recommended)
213
-
214
- The desktop app connects to `localhost:7777`. Use SSH port forwarding to tunnel to your remote server:
183
+ ### SSH Port Forwarding (Recommended)
215
184
 
216
185
  ```bash
217
186
  # Forward local port 7777 to remote server's port 7777
@@ -221,36 +190,24 @@ ssh -L 7777:localhost:7777 your-server
221
190
  ssh -fN -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -L 7777:localhost:7777 your-server
222
191
  ```
223
192
 
224
- On the remote server, start Fulcrum:
193
+ On the remote server:
225
194
  ```bash
226
195
  npx @knowsuchagency/fulcrum@latest up
227
196
  ```
228
197
 
229
- The desktop app will connect through the tunnel automatically. This approach is:
230
- - **Secure** — Backend stays bound to localhost, no exposed ports
231
- - **Performant** — Direct SSH connection, lower latency than overlay networks
232
- - **Simple** — No additional configuration needed
233
-
234
- For persistent tunnels on macOS, use a launchd agent. See [this guide](https://gist.github.com/knowsuchagency/60656087903cd56d3a9b5d1d5c803186).
198
+ The desktop app connects through the tunnel automatically. This is secure (no exposed ports), performant (direct SSH), and simple (no extra config).
235
199
 
236
- ### Browser: Tailscale or Cloudflare Tunnels
200
+ ### Browser Access
237
201
 
238
- For browser-only access, you can use Tailscale or Cloudflare Tunnels to expose your server:
239
-
240
- 1. **On the remote server:**
241
- ```bash
242
- npx @knowsuchagency/fulcrum@latest up
243
- ```
244
-
245
- 2. **Access via browser** — Open the tunnel URL (e.g., `http://your-server.tailnet.ts.net:7777`)
202
+ For browser-only access, use Tailscale or Cloudflare Tunnels to expose your server.
246
203
 
247
204
  <details>
248
205
  <summary><strong>Configuration</strong></summary>
249
206
 
250
207
  Settings are stored in `.fulcrum/settings.json`. The fulcrum directory is resolved in this order:
251
208
 
252
- 1. `FULCRUM_DIR` environment variable (explicit override)
253
- 2. `.fulcrum` in current working directory (per-worktree isolation)
209
+ 1. `FULCRUM_DIR` environment variable
210
+ 2. `.fulcrum` in current working directory
254
211
  3. `~/.fulcrum` (default)
255
212
 
256
213
  | Setting | Env Var | Default |
@@ -262,26 +219,22 @@ Settings are stored in `.fulcrum/settings.json`. The fulcrum directory is resolv
262
219
  | integrations.githubPat | `GITHUB_PAT` | null |
263
220
  | appearance.language | — | null (auto-detect) |
264
221
 
265
- Notification settings (sound, Slack, Discord, Pushover) are configured via the Settings UI or CLI.
266
-
267
- Precedence: environment variable → settings.json → default
222
+ Notification settings (sound, Slack, Discord, Pushover) are configured via Settings UI or CLI.
268
223
 
269
224
  ### Linear Integration
270
225
 
271
- Fulcrum can sync task status with Linear tickets. Configure `linearApiKey` in settings or set `LINEAR_API_KEY`. When a task is linked to a Linear ticket, status changes in Fulcrum automatically update Linear.
226
+ Sync task status with Linear tickets. Configure `linearApiKey` in settings or set `LINEAR_API_KEY`.
272
227
 
273
228
  </details>
274
229
 
275
230
  <details>
276
231
  <summary><strong>CLI Reference</strong></summary>
277
232
 
278
- The CLI lets AI agents working inside task worktrees query and update task status.
279
-
280
233
  ### Server Management
281
234
 
282
235
  ```bash
283
236
  fulcrum up # Start server daemon
284
- fulcrum up -y # Start with auto-install (no prompts)
237
+ fulcrum up -y # Start with auto-install
285
238
  fulcrum down # Stop server
286
239
  fulcrum status # Check server status
287
240
  fulcrum doctor # Check all dependencies
@@ -291,14 +244,12 @@ fulcrum mcp # Start MCP server (stdio)
291
244
  ### Current Task (auto-detected from worktree)
292
245
 
293
246
  ```bash
294
- fulcrum current-task info # Get current task info (default)
247
+ fulcrum current-task info # Get current task info
295
248
  fulcrum current-task review # Mark as IN_REVIEW
296
249
  fulcrum current-task done # Mark as DONE
297
250
  fulcrum current-task cancel # Mark as CANCELED
298
- fulcrum current-task pr <url> # Associate a PR with current task
299
- fulcrum current-task link <url> # Add a reference link to the task
300
- fulcrum current-task link # List all links
301
- fulcrum current-task link -r <id> # Remove a link
251
+ fulcrum current-task pr <url> # Associate a PR
252
+ fulcrum current-task link <url> # Add a reference link
302
253
  ```
303
254
 
304
255
  ### Agent Integration
@@ -310,31 +261,13 @@ fulcrum opencode install # Install OpenCode plugin + MCP server
310
261
  fulcrum opencode uninstall # Remove plugin + MCP server
311
262
  ```
312
263
 
313
- ### Configuration
314
-
315
- ```bash
316
- fulcrum config get <key> # Get a config value
317
- fulcrum config set <key> <value> # Set a config value
318
- ```
319
-
320
264
  ### Notifications
321
265
 
322
266
  ```bash
323
267
  fulcrum notifications # Show notification settings
324
- fulcrum notifications enable # Enable notifications
325
- fulcrum notifications disable # Disable notifications
326
- fulcrum notifications test <ch> # Test a channel
327
268
  fulcrum notify <title> [message] # Send a notification
328
269
  ```
329
270
 
330
- ### Global Options
331
-
332
- ```bash
333
- --port=<port> # Server port (default: 7777)
334
- --url=<url> # Override full server URL
335
- --pretty # Pretty-print JSON output
336
- ```
337
-
338
271
  </details>
339
272
 
340
273
  ## Internationalization
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.14.1"
44761
+ version: "2.0.0"
44739
44762
  });
44740
44763
  registerTools(server, client);
44741
44764
  const transport = new StdioServerTransport;
@@ -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.14.1",
47110
+ "version": "2.0.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.14.1",
48298
+ version: "2.0.0",
48276
48299
  description: "Harness Attention. Orchestrate Agents. Ship.",
48277
48300
  license: "PolyForm-Perimeter-1.0.0",
48278
48301
  type: "module",
@@ -48288,24 +48311,31 @@ var package_default = {
48288
48311
  "db:studio": "drizzle-kit studio"
48289
48312
  },
48290
48313
  dependencies: {
48291
- "@modelcontextprotocol/sdk": "^1.11.0",
48314
+ "@anthropic-ai/claude-agent-sdk": "^0.1.34",
48292
48315
  "@atlaskit/pragmatic-drag-and-drop": "^1.7.7",
48293
48316
  "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
48294
48317
  "@azurity/pure-nerd-font": "^3.0.5",
48295
48318
  "@base-ui/react": "^1.0.0",
48296
48319
  "@dagrejs/dagre": "^1.1.8",
48320
+ "@fontsource-variable/ibm-plex-sans": "^5.2.8",
48297
48321
  "@fontsource-variable/jetbrains-mono": "^5.2.8",
48322
+ "@fontsource/ibm-plex-mono": "^5.2.7",
48298
48323
  "@hono/node-server": "^1.19.7",
48299
48324
  "@hono/node-ws": "^1.2.0",
48300
48325
  "@hugeicons/core-free-icons": "^3.0.0",
48301
48326
  "@hugeicons/react": "^1.1.3",
48327
+ "@mdx-js/mdx": "^3.1.1",
48328
+ "@modelcontextprotocol/sdk": "^1.11.0",
48302
48329
  "@monaco-editor/react": "^4.7.0",
48303
48330
  "@octokit/rest": "^22.0.1",
48331
+ "@opencode-ai/sdk": "^1.1.34",
48304
48332
  "@radix-ui/react-collapsible": "^1.1.12",
48305
48333
  "@tailwindcss/vite": "^4.1.17",
48306
48334
  "@tanstack/react-query": "^5.90.12",
48307
48335
  "@tanstack/react-router": "^1.141.8",
48336
+ "@types/mdx": "^2.0.13",
48308
48337
  "@uiw/react-markdown-preview": "^5.1.5",
48338
+ "@uiw/react-md-editor": "^4.0.11",
48309
48339
  "@xterm/addon-clipboard": "^0.2.0",
48310
48340
  "@xterm/addon-fit": "^0.11.0",
48311
48341
  "@xterm/addon-web-links": "^0.12.0",
@@ -48322,6 +48352,7 @@ var package_default = {
48322
48352
  glob: "^13.0.0",
48323
48353
  hono: "^4.11.1",
48324
48354
  i18next: "^25.7.3",
48355
+ "lucide-react": "^0.511.0",
48325
48356
  mobx: "^6.15.0",
48326
48357
  "mobx-react-lite": "^4.1.1",
48327
48358
  "mobx-state-tree": "^7.0.2",