@thehammer/danx-dashboard-mcp 0.1.196 → 0.1.198
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.
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
* 36 KB `danxbot_api_list`) because nothing an agent
|
|
9
9
|
* reads before its first call showed the right shape. The tool description
|
|
10
10
|
* is the one surface every profile and every operator session carries.
|
|
11
|
+
* DX-4016 — the DX-3678 phase C run found the non-work profiles still paying
|
|
12
|
+
* a 4xx on three writes: a card create without `plan`, an edit whose `ac[]`
|
|
13
|
+
* items were keyed `text` (and one with no `content_hash`), and a retro whose
|
|
14
|
+
* flag was false but whose description was missing, then prose.
|
|
11
15
|
*
|
|
12
16
|
* Kept as data, not prose, so danxbot's own tests can check each example
|
|
13
17
|
* against the live server contract (route table, resource fields, body
|
|
@@ -25,10 +29,15 @@ export const DANXBOT_API_EXAMPLES = {
|
|
|
25
29
|
path: "/api/issues",
|
|
26
30
|
query: { filter: { status_derived: "ToDo", q: "<text>" } },
|
|
27
31
|
},
|
|
32
|
+
cardCreate: {
|
|
33
|
+
method: "POST",
|
|
34
|
+
path: "/api/issues",
|
|
35
|
+
body: { board: "<repo>:<slug>", type: "Bug", title: "<title>", description: "<markdown>", plan: null },
|
|
36
|
+
},
|
|
28
37
|
cardEdit: {
|
|
29
38
|
method: "PATCH",
|
|
30
39
|
path: "/api/issues/<id>/edit",
|
|
31
|
-
body: { description: "<markdown>", content_hash: "<content_hash from your read>" },
|
|
40
|
+
body: { description: "<markdown>", ac: [{ title: "<criterion>" }], content_hash: "<content_hash from your read>" },
|
|
32
41
|
},
|
|
33
42
|
comment: {
|
|
34
43
|
method: "POST",
|
|
@@ -40,6 +49,19 @@ export const DANXBOT_API_EXAMPLES = {
|
|
|
40
49
|
path: "/api/issues/<id>/checklists/<checklists[].id>/items/<items[].id>",
|
|
41
50
|
body: { status: "passing" },
|
|
42
51
|
},
|
|
52
|
+
retro: {
|
|
53
|
+
method: "PUT",
|
|
54
|
+
path: "/api/issues/<id>/retro",
|
|
55
|
+
body: {
|
|
56
|
+
good: "<text>",
|
|
57
|
+
bad: "<text>",
|
|
58
|
+
correctable_danxbot_problem: false,
|
|
59
|
+
correctable_danxbot_problem_description: "",
|
|
60
|
+
action_item_ids: [],
|
|
61
|
+
commits: [{ sha: "<sha>" }],
|
|
62
|
+
tests: [],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
43
65
|
};
|
|
44
66
|
/** The retro route's accepted `tests[].kind` values. */
|
|
45
67
|
export const RETRO_TEST_KIND_EXAMPLES = ["group", "e2e"];
|
|
@@ -52,8 +74,10 @@ export function danxbotApiExamplesText() {
|
|
|
52
74
|
const e = DANXBOT_API_EXAMPLES;
|
|
53
75
|
return (`Correct first calls: card read ${render(e.cardRead)} (\`fields\` is an object, never a comma string); ` +
|
|
54
76
|
`card list ${render(e.cardList)} (filters only inside \`filter\`); ` +
|
|
55
|
-
`card
|
|
77
|
+
`card create ${render(e.cardCreate)} (\`plan\` required: "mine" or null); ` +
|
|
78
|
+
`card edit ${render(e.cardEdit)} (only the keys you change; \`ac\` replaces the list); ` +
|
|
56
79
|
`comment ${render(e.comment)}; ` +
|
|
57
80
|
`AC tick ${render(e.acTick)}; ` +
|
|
58
|
-
`retro
|
|
81
|
+
`retro ${render(e.retro)} (description "" unless the flag is true; ` +
|
|
82
|
+
`\`tests[].kind\` ${RETRO_TEST_KIND_EXAMPLES.map((k) => `"${k}"`).join(" or ")}).`);
|
|
59
83
|
}
|
package/dist/session-stats.js
CHANGED
|
@@ -59,10 +59,17 @@ export function transcriptPathFromEnv(env) {
|
|
|
59
59
|
const realWatcher = (options) => new SessionLogWatcher(options);
|
|
60
60
|
/** The collector's dispatch-id argument; the heartbeat is addressed by session, not dispatch. */
|
|
61
61
|
const OPERATOR_DISPATCH_REF = "operator-session";
|
|
62
|
+
/**
|
|
63
|
+
* DX-3962 - the bridge's collector. `"operator-bridge"` is the ONE mode that credits a sub-agent's replies to the card
|
|
64
|
+
* it claimed (from its own transcript's pickup); a worker builds its collector with attribution off.
|
|
65
|
+
*/
|
|
66
|
+
function newCollector() {
|
|
67
|
+
return new DispatchUsage("operator-bridge");
|
|
68
|
+
}
|
|
62
69
|
export class OperatorSessionStats {
|
|
63
70
|
transcriptPath;
|
|
64
71
|
makeWatcher;
|
|
65
|
-
usage =
|
|
72
|
+
usage = newCollector();
|
|
66
73
|
watcher = null;
|
|
67
74
|
stopped = false;
|
|
68
75
|
constructor(transcriptPath, makeWatcher = realWatcher) {
|
|
@@ -153,7 +160,7 @@ export class OperatorSessionStats {
|
|
|
153
160
|
return;
|
|
154
161
|
watcher.stop();
|
|
155
162
|
this.watcher = null;
|
|
156
|
-
this.usage =
|
|
163
|
+
this.usage = newCollector();
|
|
157
164
|
})
|
|
158
165
|
.catch((err) => {
|
|
159
166
|
process.stderr.write(`operator session stats: transcript watcher failed: ${err.message}\n`);
|
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.198",
|
|
4
4
|
"description": "Stdio MCP server fronting danxbot's dashboard API for agents (operator sessions and dispatched workers alike): the generic danxbot_api/danxbot_api_list/danxbot_api_spec tools reach any route the caller's credential may call, plus dedicated agent-specific tools (plan_connect, danxbot_complete, and other per-dispatch lifecycle callbacks) (DX-3465, PLN-11 R-25).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
34
|
-
"@thehammer/danx-session-telemetry": "0.1.
|
|
34
|
+
"@thehammer/danx-session-telemetry": "0.1.21",
|
|
35
35
|
"zod": "^3.25.76"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|