wolfpack-mcp 1.0.71 → 1.0.73
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/dist/index.js +12 -7
- package/dist/workItemReminders.js +3 -2
- package/dist/workItemReminders.test.js +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -100,7 +100,7 @@ const ListWorkItemsSchema = z.object({
|
|
|
100
100
|
approved: z.coerce
|
|
101
101
|
.string()
|
|
102
102
|
.optional()
|
|
103
|
-
.describe('Filter by approval: "true" for approved items, "false" for not-yet-approved.
|
|
103
|
+
.describe('Filter by approval: "true" for approved items, "false" for not-yet-approved. Unassigned backlog items must be approved before agents may pull them; items assigned to you can be pulled regardless.'),
|
|
104
104
|
limit: z.number().optional().describe('Maximum number of items to return'),
|
|
105
105
|
offset: z.number().optional().describe('Number of items to skip'),
|
|
106
106
|
});
|
|
@@ -184,7 +184,8 @@ const UpdateWorkItemSchema = z.object({
|
|
|
184
184
|
.string()
|
|
185
185
|
.nullable()
|
|
186
186
|
.optional()
|
|
187
|
-
.describe('
|
|
187
|
+
.describe('ONLY when closing: comment explaining why the item is closed, provided together with status "closed". ' +
|
|
188
|
+
'Not for progress or completion notes — use create_work_item_comment for those.'),
|
|
188
189
|
project_slug: z
|
|
189
190
|
.string()
|
|
190
191
|
.optional()
|
|
@@ -810,7 +811,8 @@ class WolfpackMCPServer {
|
|
|
810
811
|
approved: {
|
|
811
812
|
type: 'string',
|
|
812
813
|
description: 'Filter by approval: "true" for approved items, "false" for not-yet-approved. ' +
|
|
813
|
-
'
|
|
814
|
+
'Unassigned backlog ("pending") items must be approved by a human before agents may ' +
|
|
815
|
+
'pull them; items assigned to you can be pulled regardless.',
|
|
814
816
|
},
|
|
815
817
|
limit: { type: 'number', description: 'Maximum number of items to return' },
|
|
816
818
|
offset: { type: 'number', description: 'Number of items to skip' },
|
|
@@ -872,7 +874,8 @@ class WolfpackMCPServer {
|
|
|
872
874
|
'radar_item_id (initiative), category_id, priority (0-4), size (S/M/L), work_pool_id, tags, and closing_comment. ' +
|
|
873
875
|
'STATUS WORKFLOW: "pending" (backlog) → "new" (to do) → "doing" (in progress) → "review" (work done) → "ready" (awaiting deployment) → "completed" (deployed). ' +
|
|
874
876
|
'Use "blocked" when work cannot proceed. For "pending" items use pull_work_item first. ' +
|
|
875
|
-
'When moving to "review", add a completion comment. When moving to "blocked", add a comment explaining the blocker.'
|
|
877
|
+
'When moving to "review", add a completion comment via create_work_item_comment. When moving to "blocked", add a comment explaining the blocker. ' +
|
|
878
|
+
'closing_comment is only accepted together with status "closed" — never use it for progress or completion notes.',
|
|
876
879
|
inputSchema: {
|
|
877
880
|
type: 'object',
|
|
878
881
|
properties: {
|
|
@@ -947,7 +950,8 @@ class WolfpackMCPServer {
|
|
|
947
950
|
},
|
|
948
951
|
closing_comment: {
|
|
949
952
|
type: ['string', 'null'],
|
|
950
|
-
description: '
|
|
953
|
+
description: 'ONLY when closing: comment explaining why the item is closed, provided together with status "closed". ' +
|
|
954
|
+
'Not for progress or completion notes — use create_work_item_comment for those.',
|
|
951
955
|
},
|
|
952
956
|
project_slug: {
|
|
953
957
|
type: 'string',
|
|
@@ -962,8 +966,9 @@ class WolfpackMCPServer {
|
|
|
962
966
|
description: 'Pull a specific work item from the backlog to the board. ' +
|
|
963
967
|
'REQUIRED: Use this when starting work on a "pending" (backlog) item. ' +
|
|
964
968
|
'This claims the item (assigns to you) and sets status to "new". ' +
|
|
965
|
-
'APPROVAL: Agents can only pull backlog items a human has approved
|
|
966
|
-
'
|
|
969
|
+
'APPROVAL: Agents can only pull unassigned backlog items after a human has approved them ' +
|
|
970
|
+
'(approved=true on the item). Assignment overrides approval — always pull and work items ' +
|
|
971
|
+
'assigned to you, approved or not. ' +
|
|
967
972
|
'After pulling, move to "doing" to indicate active work, then "review" when done. ' +
|
|
968
973
|
'If no assignee is specified, assigns to the API key owner. ' +
|
|
969
974
|
'In personal projects, items are always assigned to the owner.',
|
|
@@ -30,8 +30,9 @@ const STATUS_REMINDERS = {
|
|
|
30
30
|
export function getWorkItemReminders(status, description, approved) {
|
|
31
31
|
const reminders = [];
|
|
32
32
|
if (status === 'pending' && approved === false) {
|
|
33
|
-
// Overrides the generic pending reminder:
|
|
34
|
-
reminders.push('REMINDER: This backlog item has NOT been approved.
|
|
33
|
+
// Overrides the generic pending reminder: approval only gates unassigned items
|
|
34
|
+
reminders.push('REMINDER: This backlog item has NOT been approved. If it is assigned to you, that assignment ' +
|
|
35
|
+
'overrides approval — pull it with pull_work_item and start work. If it is not assigned to you, ' +
|
|
35
36
|
'leave it in the backlog until a human approves it.');
|
|
36
37
|
}
|
|
37
38
|
else {
|
|
@@ -35,10 +35,10 @@ describe('getWorkItemReminders', () => {
|
|
|
35
35
|
expect.stringContaining('pull_work_item'),
|
|
36
36
|
]);
|
|
37
37
|
});
|
|
38
|
-
it('
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
]);
|
|
38
|
+
it('explains the assignment override on unapproved pending items', () => {
|
|
39
|
+
const reminders = getWorkItemReminders('pending', PLAN, false);
|
|
40
|
+
expect(reminders).toEqual([expect.stringContaining('NOT been approved')]);
|
|
41
|
+
expect(reminders[0]).toContain('assignment overrides approval');
|
|
42
42
|
});
|
|
43
43
|
it('tells agents to move new items to doing', () => {
|
|
44
44
|
expect(getWorkItemReminders('new', PLAN)).toEqual([
|