@damper/mcp 0.8.4 → 0.8.5

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.
@@ -95,7 +95,7 @@ export function formatSelfAssessmentActions(assessment) {
95
95
  * Format complete_task response
96
96
  */
97
97
  export function formatCompleteTaskResponse(result, assessment) {
98
- const lines = [`✅ Completed ${result.id}`];
98
+ const lines = [`✅ Task ${result.id} moved to review`];
99
99
  // Self-assessment follow-up actions (shown first if provided)
100
100
  if (assessment) {
101
101
  const actions = formatSelfAssessmentActions(assessment);
@@ -131,7 +131,7 @@ export function formatAbandonTaskResponse(result, hasSummary, assessment) {
131
131
  if (!hasSummary) {
132
132
  lines.push('\n⚠️ Tip: Include a summary next time for better handoff.');
133
133
  }
134
- lines.push('\n💡 Task returned to "planned". Notes preserved for next agent.');
134
+ lines.push('\n💡 Task returned to "planned" (from in_progress or in_review). Notes preserved for next agent.');
135
135
  // Self-assessment follow-up actions
136
136
  if (assessment) {
137
137
  const actions = formatSelfAssessmentActions(assessment);
package/dist/index.js CHANGED
@@ -123,7 +123,7 @@ server.registerTool('list_tasks', {
123
123
  'If total > returned tasks, paginate with offset (e.g. offset=50 for page 2).\n\n' +
124
124
  '**Recommended:** Call `get_project_context` before starting work to understand codebase patterns.',
125
125
  inputSchema: z.object({
126
- status: z.enum(['planned', 'in_progress', 'done', 'all']).optional(),
126
+ status: z.enum(['planned', 'in_progress', 'in_review', 'done', 'all']).optional(),
127
127
  type: z.enum(['bug', 'feature', 'improvement', 'task']).optional().describe('Filter by task type'),
128
128
  quarter: z.string().optional().describe('Filter by quarter (e.g., "Q1 2025") or "none" for unscheduled'),
129
129
  sort: z.enum(['importance', 'newest', 'votes']).optional().describe('Sort order: importance (priority+votes, default), newest, or votes'),
@@ -359,7 +359,7 @@ server.registerTool('create_task', {
359
359
  description: z.string().optional().describe('Task description (shown on public roadmap). Write for end users: 1-3 sentences on what changes and why it matters. ' +
360
360
  'No code references, file paths, or jargon.'),
361
361
  type: z.enum(['bug', 'feature', 'improvement', 'task']).optional().describe('Task type (default: feature)'),
362
- status: z.enum(['planned', 'in_progress', 'done']).optional(),
362
+ status: z.enum(['planned', 'in_progress', 'in_review', 'done']).optional(),
363
363
  priority: z.enum(['high', 'medium', 'low']).optional().describe('Task priority'),
364
364
  implementationPlan: z.string().optional().describe('Implementation plan (markdown, internal only - never shown publicly)'),
365
365
  isPublic: z.boolean().optional().describe('Whether task is visible on public roadmap (default: true)'),
@@ -608,7 +608,7 @@ const DocumentationSchema = z.object({
608
608
  // Tool: Complete task
609
609
  server.registerTool('complete_task', {
610
610
  title: 'Complete Task',
611
- description: 'Mark task done with a brief one-line summary. Optionally log final commits at completion.\n\n' +
611
+ description: 'Mark task as ready for review (in_review). A human will verify and move it to done.\n\n' +
612
612
  '**Before calling:**\n' +
613
613
  '1. Push all commits\n' +
614
614
  '2. Check if project context docs need updating\n\n' +
@@ -633,6 +633,7 @@ server.registerTool('complete_task', {
633
633
  item: z.string().describe('Checklist item text from start_task'),
634
634
  evidence: z.string().describe('Concrete proof of verification (e.g., "bun test: 47 passed, 0 failed")'),
635
635
  })).optional().describe('Completion checklist confirmations — echo back each item from the checklist shown in start_task'),
636
+ skipReview: z.boolean().optional().describe('Skip human review and mark task as done immediately (default: false, task goes to in_review)'),
636
637
  }),
637
638
  outputSchema: z.object({
638
639
  id: z.string(),
@@ -645,9 +646,9 @@ server.registerTool('complete_task', {
645
646
  idempotentHint: true,
646
647
  openWorldHint: false,
647
648
  },
648
- }, async ({ taskId, summary, selfAssessment, commits, confirmations }) => {
649
+ }, async ({ taskId, summary, selfAssessment, commits, confirmations, skipReview }) => {
649
650
  try {
650
- const result = await api('POST', `/api/agent/tasks/${taskId}/complete`, { summary, commits, confirmations });
651
+ const result = await api('POST', `/api/agent/tasks/${taskId}/complete`, { summary, commits, confirmations, skipReview });
651
652
  // Log self-assessment as a structured note if provided
652
653
  if (selfAssessment) {
653
654
  const assessmentLines = ['Self-Assessment:'];
@@ -713,7 +714,7 @@ server.registerTool('complete_task', {
713
714
  // Tool: Abandon task
714
715
  server.registerTool('abandon_task', {
715
716
  title: 'Abandon Task',
716
- description: 'Release lock and return task to planned status. Use when stopping work.\n\n' +
717
+ description: 'Release lock and return task to planned status. Works for in_progress and in_review tasks.\n\n' +
717
718
  '**Before calling:**\n' +
718
719
  '1. Push any WIP commits\n\n' +
719
720
  '**Summary parameter:** What was done, what remains, blockers. Helps the next agent.\n\n' +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@damper/mcp",
3
- "version": "0.8.4",
3
+ "version": "0.8.5",
4
4
  "description": "MCP server for Damper task management",
5
5
  "author": "Damper <hello@usedamper.com>",
6
6
  "repository": {