@thehammer/danx-dashboard-mcp 0.1.95 → 0.1.96
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/handlers.js +6 -0
- package/dist/index.js +10 -1
- package/package.json +1 -1
package/dist/handlers.js
CHANGED
|
@@ -215,6 +215,12 @@ export async function issueCreate(client, args, defaultBoard) {
|
|
|
215
215
|
type: args.type,
|
|
216
216
|
title: args.title,
|
|
217
217
|
description: args.description,
|
|
218
|
+
// DX-3006 — forwarded UNCONDITIONALLY, alongside the other required
|
|
219
|
+
// fields, never behind an `if (… !== undefined)` like the optional ones
|
|
220
|
+
// below. Zod has already refused a call that omitted it, so there is
|
|
221
|
+
// nothing to coalesce here: whatever the caller decided, including an
|
|
222
|
+
// explicit null, is what the route receives.
|
|
223
|
+
plan: args.plan,
|
|
218
224
|
};
|
|
219
225
|
if (args.summary !== undefined)
|
|
220
226
|
body.summary = args.summary;
|
package/dist/index.js
CHANGED
|
@@ -362,11 +362,20 @@ server.tool("issue_get",
|
|
|
362
362
|
...boardField,
|
|
363
363
|
}, async (args) => jsonResult(await issueGet(client, args)));
|
|
364
364
|
// ---------------- issue_create ----------------
|
|
365
|
-
server.tool("issue_create", '
|
|
365
|
+
server.tool("issue_create", '`plan` is REQUIRED on every create (DX-3006): pass "mine" to put the card on THIS session\'s connected plan, or null when it deliberately belongs to no plan. There is no default and no inference — a card that names no plan is one nobody following the work can see, which is why the answer has to be given rather than omitted. "mine" while this session is on no plan is refused (409 session_not_connected) and creates NO card; a plan id is not accepted (a card is only ever created onto your own connected plan). This replaces the plan_add_card follow-up at creation time; plan_add_card remains for putting an EXISTING card on a plan. ' +
|
|
366
|
+
'Create a card via POST /api/issues. Board-scoped; see `board`. type=Epic REQUIRES non-empty phase_children[] (epic and phases inserted in one transaction; children get the epic as parent); other types refuse phase_children[] (400). Status starts at Review. `list_id` places the card straight into a column — a board_lists id or the list\'s display NAME (case-insensitive, emoji-tolerant): a `ready`-type queue lands it in ToDo, a `completed` list in Done, with no follow-up transition. Not valid on Epic; unknown name/id → 400. `gate_decisions` is REQUIRED when the board has an OPTIONAL quality gate for the card\'s type: a missing one fails closed with 400 `{error, required_gate_decisions:[...]}` naming each gate — retry with one `{gate, enabled, note}` per listed gate. ALWAYS pass `triage_enabled` explicitly on the root card and every phase child: true only when it should enter automatic triage/dispatch without human review; absent → false.', {
|
|
366
367
|
type: z.enum(ISSUE_TYPES),
|
|
367
368
|
title: z.string().min(1).describe(TITLE_DESCRIBE),
|
|
368
369
|
summary: z.string().min(1).optional().describe(SUMMARY_DESCRIBE),
|
|
369
370
|
description: z.string().describe(DESCRIPTION_DESCRIBE),
|
|
371
|
+
// DX-3006 — REQUIRED and nullable, deliberately. `.nullable()` WITHOUT
|
|
372
|
+
// `.optional()` is the whole point: the caller must supply the key, and
|
|
373
|
+
// `null` is a legitimate answer it has to give on purpose. Adding
|
|
374
|
+
// `.optional()` here silently restores the hole this field closes.
|
|
375
|
+
plan: z
|
|
376
|
+
.literal("mine")
|
|
377
|
+
.nullable()
|
|
378
|
+
.describe('"mine" = attach to the plan THIS session is connected to; null = deliberately no plan. REQUIRED — decide per card. A plan id is not accepted: a card is only ever created onto your own connected plan, so there is no id to name.'),
|
|
370
379
|
parent_id: z.string().nullable().optional(),
|
|
371
380
|
ac: z.array(z.object({ title: z.string().min(1) })).optional(),
|
|
372
381
|
effort_level: z.enum(EFFORT_VALUES).nullable().optional(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thehammer/danx-dashboard-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.96",
|
|
4
4
|
"description": "Stdio MCP server wrapping danxbot's dashboard /api/issues/* normalized DB-backed HTTP routes for dispatched agents (DX-704 Phase 2).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|