@knowsuchagency/fulcrum 1.9.2 → 1.10.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
|
@@ -43320,9 +43320,9 @@ var init_registry = __esm(() => {
|
|
|
43320
43320
|
toolRegistry = [
|
|
43321
43321
|
{
|
|
43322
43322
|
name: "list_tasks",
|
|
43323
|
-
description: "List all Fulcrum tasks with flexible filtering (search,
|
|
43323
|
+
description: "List all Fulcrum tasks with flexible filtering (search, tags, statuses, date range, overdue)",
|
|
43324
43324
|
category: "tasks",
|
|
43325
|
-
keywords: ["task", "list", "kanban", "worktree", "status", "search", "
|
|
43325
|
+
keywords: ["task", "list", "kanban", "worktree", "status", "search", "tags", "due date", "overdue", "filter"],
|
|
43326
43326
|
deferred: false
|
|
43327
43327
|
},
|
|
43328
43328
|
{
|
|
@@ -43662,17 +43662,17 @@ var init_registry = __esm(() => {
|
|
|
43662
43662
|
deferred: false
|
|
43663
43663
|
},
|
|
43664
43664
|
{
|
|
43665
|
-
name: "
|
|
43666
|
-
description: "Add a
|
|
43665
|
+
name: "add_task_tag",
|
|
43666
|
+
description: "Add a tag to a task",
|
|
43667
43667
|
category: "tasks",
|
|
43668
|
-
keywords: ["task", "
|
|
43668
|
+
keywords: ["task", "tag", "add", "categorize"],
|
|
43669
43669
|
deferred: false
|
|
43670
43670
|
},
|
|
43671
43671
|
{
|
|
43672
|
-
name: "
|
|
43673
|
-
description: "Remove a
|
|
43672
|
+
name: "remove_task_tag",
|
|
43673
|
+
description: "Remove a tag from a task",
|
|
43674
43674
|
category: "tasks",
|
|
43675
|
-
keywords: ["task", "
|
|
43675
|
+
keywords: ["task", "tag", "remove", "delete"],
|
|
43676
43676
|
deferred: false
|
|
43677
43677
|
},
|
|
43678
43678
|
{
|
|
@@ -43711,10 +43711,10 @@ var init_registry = __esm(() => {
|
|
|
43711
43711
|
deferred: false
|
|
43712
43712
|
},
|
|
43713
43713
|
{
|
|
43714
|
-
name: "
|
|
43715
|
-
description: "List tasks filtered by a specific
|
|
43714
|
+
name: "list_tasks_by_tag",
|
|
43715
|
+
description: "List tasks filtered by a specific tag",
|
|
43716
43716
|
category: "tasks",
|
|
43717
|
-
keywords: ["task", "
|
|
43717
|
+
keywords: ["task", "tag", "filter", "search"],
|
|
43718
43718
|
deferred: false
|
|
43719
43719
|
},
|
|
43720
43720
|
{
|
|
@@ -43725,10 +43725,10 @@ var init_registry = __esm(() => {
|
|
|
43725
43725
|
deferred: false
|
|
43726
43726
|
},
|
|
43727
43727
|
{
|
|
43728
|
-
name: "
|
|
43729
|
-
description: "List all unique
|
|
43728
|
+
name: "list_tags",
|
|
43729
|
+
description: "List all unique tags in use across tasks with optional search",
|
|
43730
43730
|
category: "tasks",
|
|
43731
|
-
keywords: ["
|
|
43731
|
+
keywords: ["tags", "categories", "filter", "search", "discover"],
|
|
43732
43732
|
deferred: false
|
|
43733
43733
|
},
|
|
43734
43734
|
{
|
|
@@ -43817,7 +43817,7 @@ function registerTools(server, client) {
|
|
|
43817
43817
|
tasks = tasks.filter((t2) => {
|
|
43818
43818
|
if (t2.title.toLowerCase().includes(searchLower))
|
|
43819
43819
|
return true;
|
|
43820
|
-
if (t2.
|
|
43820
|
+
if (t2.tags && t2.tags.some((tg) => tg.toLowerCase().includes(searchLower)))
|
|
43821
43821
|
return true;
|
|
43822
43822
|
if (t2.projectId && projectsMap) {
|
|
43823
43823
|
const projectName = projectsMap.get(t2.projectId);
|
|
@@ -43845,11 +43845,11 @@ function registerTools(server, client) {
|
|
|
43845
43845
|
}
|
|
43846
43846
|
if (tag) {
|
|
43847
43847
|
const tagLower = tag.toLowerCase();
|
|
43848
|
-
tasks = tasks.filter((t2) => t2.
|
|
43848
|
+
tasks = tasks.filter((t2) => t2.tags && t2.tags.some((tg) => tg.toLowerCase() === tagLower));
|
|
43849
43849
|
}
|
|
43850
43850
|
if (tags && tags.length > 0) {
|
|
43851
43851
|
const tagsLower = tags.map((tg) => tg.toLowerCase());
|
|
43852
|
-
tasks = tasks.filter((t2) => t2.
|
|
43852
|
+
tasks = tasks.filter((t2) => t2.tags && t2.tags.some((tg) => tagsLower.includes(tg.toLowerCase())));
|
|
43853
43853
|
}
|
|
43854
43854
|
if (dueDateStart) {
|
|
43855
43855
|
tasks = tasks.filter((t2) => t2.dueDate && t2.dueDate >= dueDateStart);
|
|
@@ -43905,15 +43905,15 @@ function registerTools(server, client) {
|
|
|
43905
43905
|
status: status ?? "IN_PROGRESS",
|
|
43906
43906
|
projectId: projectId ?? null,
|
|
43907
43907
|
repositoryId: repositoryId ?? null,
|
|
43908
|
-
|
|
43908
|
+
tags,
|
|
43909
43909
|
dueDate: dueDate ?? null
|
|
43910
43910
|
});
|
|
43911
43911
|
if (tags && tags.length > 0) {
|
|
43912
43912
|
const allTasks = await client.listTasks();
|
|
43913
43913
|
const existingTags = new Set;
|
|
43914
43914
|
for (const t2 of allTasks) {
|
|
43915
|
-
if (t2.
|
|
43916
|
-
for (const tg of t2.
|
|
43915
|
+
if (t2.tags) {
|
|
43916
|
+
for (const tg of t2.tags) {
|
|
43917
43917
|
existingTags.add(tg);
|
|
43918
43918
|
}
|
|
43919
43919
|
}
|
|
@@ -44153,8 +44153,8 @@ function registerTools(server, client) {
|
|
|
44153
44153
|
const allTasks = await client.listTasks();
|
|
44154
44154
|
const existingTags = new Set;
|
|
44155
44155
|
for (const t2 of allTasks) {
|
|
44156
|
-
if (t2.
|
|
44157
|
-
for (const tg of t2.
|
|
44156
|
+
if (t2.tags) {
|
|
44157
|
+
for (const tg of t2.tags) {
|
|
44158
44158
|
existingTags.add(tg);
|
|
44159
44159
|
}
|
|
44160
44160
|
}
|
|
@@ -44280,7 +44280,7 @@ function registerTools(server, client) {
|
|
|
44280
44280
|
try {
|
|
44281
44281
|
let tasks = await client.listTasks();
|
|
44282
44282
|
const tagLower = tag.toLowerCase();
|
|
44283
|
-
tasks = tasks.filter((t2) => t2.
|
|
44283
|
+
tasks = tasks.filter((t2) => t2.tags && t2.tags.some((tg) => tg.toLowerCase() === tagLower));
|
|
44284
44284
|
return formatSuccess(tasks);
|
|
44285
44285
|
} catch (err) {
|
|
44286
44286
|
return handleToolError(err);
|
|
@@ -44293,8 +44293,8 @@ function registerTools(server, client) {
|
|
|
44293
44293
|
const tasks = await client.listTasks();
|
|
44294
44294
|
const tagCounts = new Map;
|
|
44295
44295
|
for (const task of tasks) {
|
|
44296
|
-
if (task.
|
|
44297
|
-
for (const tag of task.
|
|
44296
|
+
if (task.tags) {
|
|
44297
|
+
for (const tag of task.tags) {
|
|
44298
44298
|
tagCounts.set(tag, (tagCounts.get(tag) || 0) + 1);
|
|
44299
44299
|
}
|
|
44300
44300
|
}
|
|
@@ -46225,8 +46225,8 @@ function formatTask(task, dependencies, attachments) {
|
|
|
46225
46225
|
if (task.links && task.links.length > 0) {
|
|
46226
46226
|
console.log(` Links: ${task.links.map((l2) => l2.label || l2.url).join(", ")}`);
|
|
46227
46227
|
}
|
|
46228
|
-
if (task.
|
|
46229
|
-
console.log(`
|
|
46228
|
+
if (task.tags && task.tags.length > 0) {
|
|
46229
|
+
console.log(` Tags: ${task.tags.join(", ")}`);
|
|
46230
46230
|
}
|
|
46231
46231
|
if (task.dueDate)
|
|
46232
46232
|
console.log(` Due: ${task.dueDate}`);
|
|
@@ -47082,7 +47082,7 @@ var marketplace_default = `{
|
|
|
47082
47082
|
"name": "fulcrum",
|
|
47083
47083
|
"source": "./",
|
|
47084
47084
|
"description": "Task orchestration for Claude Code",
|
|
47085
|
-
"version": "1.
|
|
47085
|
+
"version": "1.10.0",
|
|
47086
47086
|
"skills": [
|
|
47087
47087
|
"./skills/fulcrum"
|
|
47088
47088
|
],
|
|
@@ -47366,7 +47366,7 @@ search_tools { category: "filesystem" }
|
|
|
47366
47366
|
|
|
47367
47367
|
### Task Tools
|
|
47368
47368
|
|
|
47369
|
-
- \`list_tasks\` - List tasks with flexible filtering (search,
|
|
47369
|
+
- \`list_tasks\` - List tasks with flexible filtering (search, tags, statuses, date range, overdue)
|
|
47370
47370
|
- \`get_task\` - Get task details by ID (includes dependencies and attachments)
|
|
47371
47371
|
- \`create_task\` - Create a new task with worktree
|
|
47372
47372
|
- \`update_task\` - Update task metadata
|
|
@@ -47375,10 +47375,10 @@ search_tools { category: "filesystem" }
|
|
|
47375
47375
|
- \`add_task_link\` - Add URL link to task
|
|
47376
47376
|
- \`remove_task_link\` - Remove link from task
|
|
47377
47377
|
- \`list_task_links\` - List all task links
|
|
47378
|
-
- \`add_task_tag\` - Add a
|
|
47379
|
-
- \`remove_task_tag\` - Remove a
|
|
47378
|
+
- \`add_task_tag\` - Add a tag to a task (returns similar tags to catch typos)
|
|
47379
|
+
- \`remove_task_tag\` - Remove a tag from a task
|
|
47380
47380
|
- \`set_task_due_date\` - Set or clear task due date
|
|
47381
|
-
- \`list_tags\` - List all unique
|
|
47381
|
+
- \`list_tags\` - List all unique tags in use with optional search
|
|
47382
47382
|
|
|
47383
47383
|
#### Task Dependencies
|
|
47384
47384
|
|
|
@@ -47400,8 +47400,8 @@ The \`list_tasks\` tool supports powerful filtering for AI agents:
|
|
|
47400
47400
|
|
|
47401
47401
|
\`\`\`json
|
|
47402
47402
|
{
|
|
47403
|
-
"search": "ocai", // Text search across title,
|
|
47404
|
-
"
|
|
47403
|
+
"search": "ocai", // Text search across title, tags, project name
|
|
47404
|
+
"tags": ["bug", "urgent"], // Filter by multiple tags (OR logic)
|
|
47405
47405
|
"statuses": ["TO_DO", "IN_PROGRESS"], // Filter by multiple statuses (OR logic)
|
|
47406
47406
|
"dueDateStart": "2026-01-18", // Start of date range
|
|
47407
47407
|
"dueDateEnd": "2026-01-25", // End of date range
|
|
@@ -47409,17 +47409,17 @@ The \`list_tasks\` tool supports powerful filtering for AI agents:
|
|
|
47409
47409
|
}
|
|
47410
47410
|
\`\`\`
|
|
47411
47411
|
|
|
47412
|
-
####
|
|
47412
|
+
#### Tag Discovery
|
|
47413
47413
|
|
|
47414
|
-
Use \`
|
|
47414
|
+
Use \`list_tags\` to discover exact tag names before filtering:
|
|
47415
47415
|
|
|
47416
47416
|
\`\`\`json
|
|
47417
|
-
// Find
|
|
47417
|
+
// Find tags matching "communication"
|
|
47418
47418
|
{ "search": "communication" }
|
|
47419
47419
|
// Returns: [{ "name": "communication required", "count": 5 }]
|
|
47420
47420
|
\`\`\`
|
|
47421
47421
|
|
|
47422
|
-
This helps handle typos and variations - search first, then use the exact
|
|
47422
|
+
This helps handle typos and variations - search first, then use the exact tag name.
|
|
47423
47423
|
|
|
47424
47424
|
### Project Tools
|
|
47425
47425
|
|
|
@@ -48195,7 +48195,7 @@ function installUv() {
|
|
|
48195
48195
|
var package_default = {
|
|
48196
48196
|
name: "@knowsuchagency/fulcrum",
|
|
48197
48197
|
private: true,
|
|
48198
|
-
version: "1.
|
|
48198
|
+
version: "1.10.0",
|
|
48199
48199
|
description: "Harness Attention. Orchestrate Agents. Ship.",
|
|
48200
48200
|
license: "PolyForm-Perimeter-1.0.0",
|
|
48201
48201
|
type: "module",
|