@starlove/orbit 1.1.1 → 1.1.11
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/.dockerignore +0 -0
- package/Dockerfile +0 -0
- package/LICENSE +0 -0
- package/README.md +2 -2
- package/SKILL-ORBIT.md +2 -0
- package/build.mjs +0 -0
- package/dist/full/apple-touch-icon.png +0 -0
- package/dist/full/cursors/live_arrow.cur +0 -0
- package/dist/full/cursors/live_link.cur +0 -0
- package/dist/full/cursors/live_move.cur +0 -0
- package/dist/full/cursors/live_select.cur +0 -0
- package/dist/full/cursors/live_unavail.cur +0 -0
- package/dist/full/favicon-32x32.png +0 -0
- package/dist/full/index.html +160 -15
- package/dist/full/js/app.55b38e12.js +698 -0
- package/dist/full/js/app.55b38e12.js.map +7 -0
- package/dist/full/orbits-favicon.png +0 -0
- package/dist/full/orbits-logo-bg.png +0 -0
- package/dist/full/orbits-logo.png +0 -0
- package/dist/full/{styles.836872e7.css → styles.273fc37a.css} +79 -39
- package/dist/full/version.json +2 -2
- package/docs/AGENT_PROTOCOL.md +22 -6
- package/docs/MCP_SETUP.md +0 -0
- package/docs/ORBIT_DISPATCH.md +68 -8
- package/docs/SS-Orbit-Dark.png +0 -0
- package/docs/SS-Orbit-Light.png +0 -0
- package/docs/mcp-client.example.json +0 -0
- package/docs/setup/orbit-init-wizard.md +0 -0
- package/package.json +1 -1
- package/public/apple-touch-icon.png +0 -0
- package/public/cursors/live_arrow.cur +0 -0
- package/public/cursors/live_link.cur +0 -0
- package/public/cursors/live_move.cur +0 -0
- package/public/cursors/live_select.cur +0 -0
- package/public/cursors/live_unavail.cur +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/index.html +158 -13
- package/public/js/actor-labels.js +0 -0
- package/public/js/api.js +0 -0
- package/public/js/app.js +0 -0
- package/public/js/board-menu.js +0 -0
- package/public/js/card-actions.js +19 -0
- package/public/js/config.js +0 -0
- package/public/js/create-card.js +0 -0
- package/public/js/dom.js +0 -0
- package/public/js/drawer.js +17 -43
- package/public/js/format.js +5 -5
- package/public/js/kanban.js +157 -92
- package/public/js/local-backend.js +15 -4
- package/public/js/main.js +2 -1
- package/public/js/modal.js +0 -0
- package/public/js/motion-preference.js +14 -3
- package/public/js/router.js +0 -0
- package/public/js/search.js +0 -0
- package/public/js/settings-tabs.js +0 -0
- package/public/js/settings.js +131 -27
- package/public/js/sse.js +0 -0
- package/public/js/starscape.js +0 -0
- package/public/js/state.js +0 -0
- package/public/js/theme-preference.js +0 -0
- package/public/js/ticket-detail.js +88 -20
- package/public/js/toast.js +0 -0
- package/public/js/transport.js +0 -0
- package/public/js/unread.js +0 -0
- package/public/js/url-routes.js +0 -0
- package/public/orbits-favicon.png +0 -0
- package/public/orbits-logo-bg.png +0 -0
- package/public/orbits-logo.png +0 -0
- package/public/styles.css +79 -39
- package/src/cli/orbit.js +22 -0
- package/src/core/agent.js +25 -4
- package/src/core/agents-md.js +0 -0
- package/src/core/attachments.js +0 -0
- package/src/core/auth.js +0 -0
- package/src/core/backups.js +0 -0
- package/src/core/board.js +2 -1
- package/src/core/boards.js +0 -0
- package/src/core/bootstrap.js +0 -0
- package/src/core/db.js +19 -0
- package/src/core/delete-board.js +0 -0
- package/src/core/dispatch.js +178 -13
- package/src/core/events.js +0 -0
- package/src/core/http.js +0 -0
- package/src/core/migrate.js +0 -0
- package/src/core/paths.js +0 -0
- package/src/core/provision-repo-board.js +0 -0
- package/src/core/queries.js +0 -0
- package/src/core/registry.js +2 -2
- package/src/core/relations.js +0 -0
- package/src/core/review-verdicts.js +138 -0
- package/src/core/router.js +38 -3
- package/src/core/search.js +0 -0
- package/src/core/seed.js +0 -0
- package/src/core/snapshots.js +429 -9
- package/src/core/states.js +0 -0
- package/src/core/system-picker.js +0 -0
- package/src/core/tickets.js +0 -0
- package/src/core/util.js +0 -0
- package/src/mcp/orbit-client.js +47 -19
- package/src/mcp-server.js +122 -26
- package/src/server.js +0 -0
- package/dist/full/js/app.a4f045fc.js +0 -676
- package/dist/full/js/app.a4f045fc.js.map +0 -7
package/src/mcp-server.js
CHANGED
|
@@ -142,8 +142,10 @@ function createBoardAtRoot(root) {
|
|
|
142
142
|
if (fresh) { syncRegistryFromBoardDb(fresh, db); setSessionBoard(fresh); }
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
if (orbitClient.mode !== "remote") {
|
|
146
|
+
initMcpSessionBoard();
|
|
147
|
+
closeAllConnections();
|
|
148
|
+
}
|
|
147
149
|
|
|
148
150
|
/** Build a ctx for the session board (or a board the tool argument selected). */
|
|
149
151
|
function ctxFor(boardRow, actor) {
|
|
@@ -185,7 +187,7 @@ const TOOL_DEFS = [
|
|
|
185
187
|
{
|
|
186
188
|
name: "board_context",
|
|
187
189
|
description:
|
|
188
|
-
"Board context pack:
|
|
190
|
+
"Board/project context pack: board metadata, agent_instructions, journal entries (board_entries), and deployment paths. Complements the lean board_get_ticket_context. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Set include_struck true to include struck journal rows (default false). Same payload as GET /api/boards/:id/context.",
|
|
189
191
|
inputSchema: {
|
|
190
192
|
type: "object",
|
|
191
193
|
properties: {
|
|
@@ -212,7 +214,7 @@ const TOOL_DEFS = [
|
|
|
212
214
|
{
|
|
213
215
|
name: "board_set_active",
|
|
214
216
|
description:
|
|
215
|
-
"Switch the MCP session to another board by slug (updates last_active_at for multi-board repos).
|
|
217
|
+
"Switch the MCP session fallback to another board by slug (updates last_active_at for multi-board repos). Tools that accept board_id / board_slug / board use those explicit selectors first; this session board is only the convenience fallback when selectors are omitted.",
|
|
216
218
|
inputSchema: {
|
|
217
219
|
type: "object",
|
|
218
220
|
properties: {
|
|
@@ -226,7 +228,7 @@ const TOOL_DEFS = [
|
|
|
226
228
|
{
|
|
227
229
|
name: "board_claim_next",
|
|
228
230
|
description:
|
|
229
|
-
"Claim the next schedulable AI-ready ticket on
|
|
231
|
+
"Claim the next schedulable AI-ready ticket on a specific board. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience when selectors are omitted, and omitted selectors never scan other boards.",
|
|
230
232
|
inputSchema: {
|
|
231
233
|
type: "object",
|
|
232
234
|
properties: {
|
|
@@ -243,7 +245,7 @@ const TOOL_DEFS = [
|
|
|
243
245
|
{
|
|
244
246
|
name: "board_get_ticket_context",
|
|
245
247
|
description:
|
|
246
|
-
"
|
|
248
|
+
"Return the default lean context pack for a ticket: ticket fields, board identity only, relations, blockers, parent/children, and related ticket summaries. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Project manual/journal and comments are intentionally omitted; use board_context for board manual/journal and board_read_comments for comment threads.",
|
|
247
249
|
inputSchema: {
|
|
248
250
|
type: "object",
|
|
249
251
|
properties: {
|
|
@@ -261,10 +263,31 @@ const TOOL_DEFS = [
|
|
|
261
263
|
},
|
|
262
264
|
handler: (args) => orbitClient.getTicketContext(args)
|
|
263
265
|
},
|
|
266
|
+
{
|
|
267
|
+
name: "board_get_ticket_context_full",
|
|
268
|
+
description:
|
|
269
|
+
"Return the explicit heavy ticket context pack, preserving the historical board_get_ticket_context shape: ticket, full board row, board_manual/journal, relations, blockers, parent/children, and related tickets. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Comments are still intentionally omitted; use board_read_comments for comment threads.",
|
|
270
|
+
inputSchema: {
|
|
271
|
+
type: "object",
|
|
272
|
+
properties: {
|
|
273
|
+
ticket_id: { type: "string" },
|
|
274
|
+
board_id: { type: "string" },
|
|
275
|
+
board_slug: { type: "string" },
|
|
276
|
+
board: { type: "string" },
|
|
277
|
+
depth: { type: "integer", minimum: 1, maximum: 3 },
|
|
278
|
+
max_chars_per_field: { type: "integer", minimum: 1 },
|
|
279
|
+
include_parent_full: { type: "boolean" },
|
|
280
|
+
include_related_full: { type: "boolean" }
|
|
281
|
+
},
|
|
282
|
+
required: ["ticket_id"],
|
|
283
|
+
additionalProperties: false
|
|
284
|
+
},
|
|
285
|
+
handler: (args) => orbitClient.getTicketContextFull(args)
|
|
286
|
+
},
|
|
264
287
|
{
|
|
265
288
|
name: "board_get_agent_dispatch_packet",
|
|
266
289
|
description:
|
|
267
|
-
"Return a lean agent dispatch packet for one ticket: board identity/instructions, capped ticket description/acceptance/AI plan, blockers, shallow parent, relevant workflow state IDs, repo path/default branch, recent capped comments, and label names. Parent/related/implementation bodies are intentionally omitted.",
|
|
290
|
+
"Return a lean agent dispatch packet for one ticket: board identity/instructions, capped ticket description/acceptance/AI plan, blockers, shallow parent, relevant workflow state IDs, repo path/default branch, recent capped comments, and label names. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Parent/related/implementation bodies are intentionally omitted.",
|
|
268
291
|
inputSchema: {
|
|
269
292
|
type: "object",
|
|
270
293
|
properties: {
|
|
@@ -283,7 +306,7 @@ const TOOL_DEFS = [
|
|
|
283
306
|
{
|
|
284
307
|
name: "board_read_ticket",
|
|
285
308
|
description:
|
|
286
|
-
"Look up a ticket by ticket_id, number, or exact title (case-insensitive)
|
|
309
|
+
"Look up a ticket by ticket_id, number, or exact title (case-insensitive), and return its title, description, labels, state, and the board manual (agent_instructions + journal + deployment paths). Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Ticket comments are intentionally omitted; use board_read_comments for explicit comment retrieval.",
|
|
287
310
|
inputSchema: {
|
|
288
311
|
type: "object",
|
|
289
312
|
properties: {
|
|
@@ -301,7 +324,7 @@ const TOOL_DEFS = [
|
|
|
301
324
|
{
|
|
302
325
|
name: "board_read_comments",
|
|
303
326
|
description:
|
|
304
|
-
"Return every comment on a ticket (oldest → newest). Look up by ticket_id, number, or exact title (case-insensitive)
|
|
327
|
+
"Return every comment on a ticket (oldest → newest). Look up by ticket_id, number, or exact title (case-insensitive). Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Comment kinds include human_comment, agent_note, checkpoint, completion, note.",
|
|
305
328
|
inputSchema: {
|
|
306
329
|
type: "object",
|
|
307
330
|
properties: {
|
|
@@ -318,7 +341,7 @@ const TOOL_DEFS = [
|
|
|
318
341
|
},
|
|
319
342
|
{
|
|
320
343
|
name: "board_get_ticket_relations",
|
|
321
|
-
description: "List every link touching a ticket. Each entry has `type`, `direction`, `other_ticket`, and `source`. `source='relation'` rows come from the relations table (`relates_to` / `blocks` / `blocked_by`) and are the SSOT for peer dependencies — write via `POST /api/relations`, delete via `DELETE /api/relations/:id`. `source='hierarchy'` rows are read-only synthetic entries surfacing epic ownership (`child_of` toward the parent epic, `parent_of` toward each child); they have `id: null` and are mutated by patching the ticket's `parent_ticket_id`, not by calling the relations endpoints.",
|
|
344
|
+
description: "List every link touching a ticket. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Each entry has `type`, `direction`, `other_ticket`, and `source`. `source='relation'` rows come from the relations table (`relates_to` / `blocks` / `blocked_by`) and are the SSOT for peer dependencies — write via `POST /api/relations`, delete via `DELETE /api/relations/:id`. `source='hierarchy'` rows are read-only synthetic entries surfacing epic ownership (`child_of` toward the parent epic, `parent_of` toward each child); they have `id: null` and are mutated by patching the ticket's `parent_ticket_id`, not by calling the relations endpoints.",
|
|
322
345
|
inputSchema: {
|
|
323
346
|
type: "object",
|
|
324
347
|
properties: {
|
|
@@ -334,7 +357,7 @@ const TOOL_DEFS = [
|
|
|
334
357
|
},
|
|
335
358
|
{
|
|
336
359
|
name: "board_get_ticket_blockers",
|
|
337
|
-
description: "Return unresolved blockers for a ticket and a can_start boolean. The single source of truth for dependencies is the per-card `blocked_by` row in the relations table; if a row exists the blocker is unresolved. Rows are removed two ways: (1) automatically when the blocking ticket moves into the Done lane (state role='done'), or (2) manually by the user in the UI. A ticket with can_start=false must not be worked on until its blockers resolve. Epic blocker targets expand to that epic's open children (children in any lane whose role is not 'done', not archived); each expanded entry carries via_epic_id.",
|
|
360
|
+
description: "Return unresolved blockers for a ticket and a can_start boolean. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. The single source of truth for dependencies is the per-card `blocked_by` row in the relations table; if a row exists the blocker is unresolved. Rows are removed two ways: (1) automatically when the blocking ticket moves into the Done lane (state role='done'), or (2) manually by the user in the UI. A ticket with can_start=false must not be worked on until its blockers resolve. Epic blocker targets expand to that epic's open children (children in any lane whose role is not 'done', not archived); each expanded entry carries via_epic_id.",
|
|
338
361
|
inputSchema: {
|
|
339
362
|
type: "object",
|
|
340
363
|
properties: {
|
|
@@ -351,7 +374,7 @@ const TOOL_DEFS = [
|
|
|
351
374
|
{
|
|
352
375
|
name: "board_search",
|
|
353
376
|
description:
|
|
354
|
-
"Search tickets, comments, and implementation records by text on
|
|
377
|
+
"Search tickets, comments, and implementation records by text on a specific board. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience when selectors are omitted, and omitted selectors never merge results from other boards.",
|
|
355
378
|
inputSchema: {
|
|
356
379
|
type: "object",
|
|
357
380
|
properties: {
|
|
@@ -373,7 +396,7 @@ const TOOL_DEFS = [
|
|
|
373
396
|
{
|
|
374
397
|
name: "board_create_ticket",
|
|
375
398
|
description:
|
|
376
|
-
"Create a new Orbit ticket/card
|
|
399
|
+
"Create a new Orbit ticket/card. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience. Use this instead of editing .orbit/board.db directly. Same operation as POST /api/tickets.",
|
|
377
400
|
inputSchema: {
|
|
378
401
|
type: "object",
|
|
379
402
|
properties: {
|
|
@@ -399,11 +422,14 @@ const TOOL_DEFS = [
|
|
|
399
422
|
{
|
|
400
423
|
name: "board_update_ticket",
|
|
401
424
|
description:
|
|
402
|
-
"Update ticket fields such as AI plan, implementation summary, implementation updates, state, type, priority, or labels (full replace: array of label names).",
|
|
425
|
+
"Update ticket fields such as AI plan, implementation summary, implementation updates, state, type, priority, or labels (full replace: array of label names). Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
403
426
|
inputSchema: {
|
|
404
427
|
type: "object",
|
|
405
428
|
properties: {
|
|
406
429
|
ticket_id: { type: "string" },
|
|
430
|
+
board_id: { type: "string" },
|
|
431
|
+
board_slug: { type: "string" },
|
|
432
|
+
board: { type: "string" },
|
|
407
433
|
title: { type: "string" },
|
|
408
434
|
description: { type: "string" },
|
|
409
435
|
type: { type: "string" },
|
|
@@ -422,11 +448,14 @@ const TOOL_DEFS = [
|
|
|
422
448
|
},
|
|
423
449
|
{
|
|
424
450
|
name: "board_add_comment",
|
|
425
|
-
description: "Add a ticket comment or agent breadcrumb.",
|
|
451
|
+
description: "Add a ticket comment or agent breadcrumb. Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
426
452
|
inputSchema: {
|
|
427
453
|
type: "object",
|
|
428
454
|
properties: {
|
|
429
455
|
ticket_id: { type: "string" },
|
|
456
|
+
board_id: { type: "string" },
|
|
457
|
+
board_slug: { type: "string" },
|
|
458
|
+
board: { type: "string" },
|
|
430
459
|
body: { type: "string" },
|
|
431
460
|
kind: { type: "string" }
|
|
432
461
|
},
|
|
@@ -435,14 +464,73 @@ const TOOL_DEFS = [
|
|
|
435
464
|
},
|
|
436
465
|
handler: ({ ticket_id, ...body }) => orbitClient.addComment({ ticket_id, ...body })
|
|
437
466
|
},
|
|
467
|
+
{
|
|
468
|
+
name: "board_create_review_verdict",
|
|
469
|
+
description: "Create a durable Sentinel/agent review verdict for a ticket. Verdict must be PASS, BLOCK, or QUESTION. Findings and evidence commands are stored as structured arrays; comments may mirror the data for humans but are not the source of truth. Resolves board from board_id / board_slug / board; the active session board is only a fallback convenience.",
|
|
470
|
+
inputSchema: {
|
|
471
|
+
type: "object",
|
|
472
|
+
properties: {
|
|
473
|
+
ticket_id: { type: "string" },
|
|
474
|
+
board_id: { type: "string" },
|
|
475
|
+
board_slug: { type: "string" },
|
|
476
|
+
board: { type: "string" },
|
|
477
|
+
verdict: { type: "string", enum: ["PASS", "BLOCK", "QUESTION"] },
|
|
478
|
+
blocking_findings: { type: "array" },
|
|
479
|
+
optional_findings: { type: "array" },
|
|
480
|
+
evidence_commands: { type: "array" },
|
|
481
|
+
reviewer_profile: { type: "string" },
|
|
482
|
+
reviewer_session_id: { type: "string" },
|
|
483
|
+
reviewed_commit_sha: { type: "string" },
|
|
484
|
+
dispatch_run_id: { type: "string" },
|
|
485
|
+
supersedes_prior_review_id: { type: ["string", "null"] }
|
|
486
|
+
},
|
|
487
|
+
required: ["ticket_id", "verdict"],
|
|
488
|
+
additionalProperties: false
|
|
489
|
+
},
|
|
490
|
+
handler: ({ ticket_id, ...body }) => orbitClient.createReviewVerdict({ ticket_id, ...body })
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
name: "board_list_review_verdicts",
|
|
494
|
+
description: "List durable review verdict records for a ticket, newest first. Use this for repair/re-review tooling instead of parsing prose comments.",
|
|
495
|
+
inputSchema: {
|
|
496
|
+
type: "object",
|
|
497
|
+
properties: {
|
|
498
|
+
ticket_id: { type: "string" },
|
|
499
|
+
board_id: { type: "string" },
|
|
500
|
+
board_slug: { type: "string" },
|
|
501
|
+
board: { type: "string" },
|
|
502
|
+
limit: { type: "integer", minimum: 1, maximum: 200 }
|
|
503
|
+
},
|
|
504
|
+
required: ["ticket_id"],
|
|
505
|
+
additionalProperties: false
|
|
506
|
+
},
|
|
507
|
+
handler: (args) => orbitClient.listReviewVerdicts(args)
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
name: "board_get_review_verdict",
|
|
511
|
+
description: "Read one durable review verdict record by id.",
|
|
512
|
+
inputSchema: {
|
|
513
|
+
type: "object",
|
|
514
|
+
properties: {
|
|
515
|
+
review_id: { type: "string" },
|
|
516
|
+
board_id: { type: "string" },
|
|
517
|
+
board_slug: { type: "string" },
|
|
518
|
+
board: { type: "string" }
|
|
519
|
+
},
|
|
520
|
+
required: ["review_id"],
|
|
521
|
+
additionalProperties: false
|
|
522
|
+
},
|
|
523
|
+
handler: (args) => orbitClient.getReviewVerdict(args)
|
|
524
|
+
},
|
|
438
525
|
{
|
|
439
526
|
name: "board_add_board_entry",
|
|
440
|
-
description: "Add a durable board-level decision or lesson for future agents.",
|
|
527
|
+
description: "Add a durable board-level decision or lesson for future agents. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience.",
|
|
441
528
|
inputSchema: {
|
|
442
529
|
type: "object",
|
|
443
530
|
properties: {
|
|
444
531
|
board_id: { type: "string" },
|
|
445
532
|
board_slug: { type: "string" },
|
|
533
|
+
board: { type: "string" },
|
|
446
534
|
type: { type: "string", enum: ["decision", "lesson"] },
|
|
447
535
|
title: { type: "string" },
|
|
448
536
|
body: { type: "string" },
|
|
@@ -456,11 +544,14 @@ const TOOL_DEFS = [
|
|
|
456
544
|
{
|
|
457
545
|
name: "board_checkpoint",
|
|
458
546
|
description:
|
|
459
|
-
"Pause mid-flight for a human: moves the ticket to Review (same lane as board_complete; checkpoint distinguishes a blocking question) and posts a checkpoint-kind comment with your message. Use when you cannot proceed without the user—not for normal 'work is done' handoff (use board_complete).",
|
|
547
|
+
"Pause mid-flight for a human: moves the ticket to Review (same lane as board_complete; checkpoint distinguishes a blocking question) and posts a checkpoint-kind comment with your message. Use when you cannot proceed without the user—not for normal 'work is done' handoff (use board_complete). Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
460
548
|
inputSchema: {
|
|
461
549
|
type: "object",
|
|
462
550
|
properties: {
|
|
463
551
|
ticket_id: { type: "string" },
|
|
552
|
+
board_id: { type: "string" },
|
|
553
|
+
board_slug: { type: "string" },
|
|
554
|
+
board: { type: "string" },
|
|
464
555
|
message: { type: "string" }
|
|
465
556
|
},
|
|
466
557
|
required: ["ticket_id", "message"],
|
|
@@ -471,11 +562,14 @@ const TOOL_DEFS = [
|
|
|
471
562
|
{
|
|
472
563
|
name: "board_complete",
|
|
473
564
|
description:
|
|
474
|
-
"Hand off finished work for human review: moves the ticket to the Review lane (by role or name), writes a completion comment (summary, optional PR URL), and optional implementation_updates. This is the usual 'ready for you to look' path; use board_checkpoint only when blocked mid-flight.",
|
|
565
|
+
"Hand off finished work for human review: moves the ticket to the Review lane (by role or name), writes a completion comment (summary, optional PR URL), and optional implementation_updates. This is the usual 'ready for you to look' path; use board_checkpoint only when blocked mid-flight. Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
475
566
|
inputSchema: {
|
|
476
567
|
type: "object",
|
|
477
568
|
properties: {
|
|
478
569
|
ticket_id: { type: "string" },
|
|
570
|
+
board_id: { type: "string" },
|
|
571
|
+
board_slug: { type: "string" },
|
|
572
|
+
board: { type: "string" },
|
|
479
573
|
summary: { type: "string" },
|
|
480
574
|
updates: { type: "string" },
|
|
481
575
|
pr_url: { type: "string" },
|
|
@@ -489,10 +583,10 @@ const TOOL_DEFS = [
|
|
|
489
583
|
{
|
|
490
584
|
name: "board_archive_ticket",
|
|
491
585
|
description:
|
|
492
|
-
"Archive (soft-delete) a ticket. The ticket is moved off the board into the Archive: it is excluded from bootstrap, search, claim-next, blockers, and relations, but its data and comments are preserved. Reverse with board_restore_ticket; permanently remove with board_delete_ticket.",
|
|
586
|
+
"Archive (soft-delete) a ticket. The ticket is moved off the board into the Archive: it is excluded from bootstrap, search, claim-next, blockers, and relations, but its data and comments are preserved. Reverse with board_restore_ticket; permanently remove with board_delete_ticket. Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
493
587
|
inputSchema: {
|
|
494
588
|
type: "object",
|
|
495
|
-
properties: { ticket_id: { type: "string" } },
|
|
589
|
+
properties: { ticket_id: { type: "string" }, board_id: { type: "string" }, board_slug: { type: "string" }, board: { type: "string" } },
|
|
496
590
|
required: ["ticket_id"],
|
|
497
591
|
additionalProperties: false
|
|
498
592
|
},
|
|
@@ -500,10 +594,10 @@ const TOOL_DEFS = [
|
|
|
500
594
|
},
|
|
501
595
|
{
|
|
502
596
|
name: "board_restore_ticket",
|
|
503
|
-
description: "Restore an archived ticket back to the board in its previous lane (state).",
|
|
597
|
+
description: "Restore an archived ticket back to the board in its previous lane (state). Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
504
598
|
inputSchema: {
|
|
505
599
|
type: "object",
|
|
506
|
-
properties: { ticket_id: { type: "string" } },
|
|
600
|
+
properties: { ticket_id: { type: "string" }, board_id: { type: "string" }, board_slug: { type: "string" }, board: { type: "string" } },
|
|
507
601
|
required: ["ticket_id"],
|
|
508
602
|
additionalProperties: false
|
|
509
603
|
},
|
|
@@ -512,10 +606,10 @@ const TOOL_DEFS = [
|
|
|
512
606
|
{
|
|
513
607
|
name: "board_delete_ticket",
|
|
514
608
|
description:
|
|
515
|
-
"Permanently delete a ticket. The ticket MUST already be archived (call board_archive_ticket first) — otherwise this returns 409 ticket_not_archived. This cannot be undone: comments, labels, and relations are removed via cascade. Events for this ticket are kept but their ticket_id becomes NULL.",
|
|
609
|
+
"Permanently delete a ticket. The ticket MUST already be archived (call board_archive_ticket first) — otherwise this returns 409 ticket_not_archived. This cannot be undone: comments, labels, and relations are removed via cascade. Events for this ticket are kept but their ticket_id becomes NULL. Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
516
610
|
inputSchema: {
|
|
517
611
|
type: "object",
|
|
518
|
-
properties: { ticket_id: { type: "string" } },
|
|
612
|
+
properties: { ticket_id: { type: "string" }, board_id: { type: "string" }, board_slug: { type: "string" }, board: { type: "string" } },
|
|
519
613
|
required: ["ticket_id"],
|
|
520
614
|
additionalProperties: false
|
|
521
615
|
},
|
|
@@ -536,12 +630,13 @@ const TOOL_DEFS = [
|
|
|
536
630
|
},
|
|
537
631
|
{
|
|
538
632
|
name: "board_export_board",
|
|
539
|
-
description: "Export a board snapshot as JSON for backup or transfer.",
|
|
633
|
+
description: "Export a board snapshot as JSON for backup or transfer. Resolves board from board_id / board_slug / board first; the MCP session board is only a fallback convenience.",
|
|
540
634
|
inputSchema: {
|
|
541
635
|
type: "object",
|
|
542
636
|
properties: {
|
|
543
637
|
board_id: { type: "string" },
|
|
544
638
|
board_slug: { type: "string" },
|
|
639
|
+
board: { type: "string" },
|
|
545
640
|
include_attachments: { type: "boolean", description: "Embed attached image bytes in the JSON snapshot." },
|
|
546
641
|
include_images: { type: "boolean", description: "Alias for include_attachments." }
|
|
547
642
|
},
|
|
@@ -552,12 +647,13 @@ const TOOL_DEFS = [
|
|
|
552
647
|
{
|
|
553
648
|
name: "board_update_settings",
|
|
554
649
|
description:
|
|
555
|
-
"PATCH-equivalent for board settings: name (display rename only; slug/canonical URLs stay unchanged), repo_url, system_path, default_branch, agent_instructions (project-level agent context), and project_notes (Notes For You).",
|
|
650
|
+
"PATCH-equivalent for board settings: name (display rename only; slug/canonical URLs stay unchanged), repo_url, system_path, default_branch, agent_instructions (project-level agent context), and project_notes (Notes For You). Resolves board from board_id / board_slug / board; the MCP session board is only a fallback convenience.",
|
|
556
651
|
inputSchema: {
|
|
557
652
|
type: "object",
|
|
558
653
|
properties: {
|
|
559
654
|
board_id: { type: "string" },
|
|
560
655
|
board_slug: { type: "string" },
|
|
656
|
+
board: { type: "string" },
|
|
561
657
|
name: { type: "string" },
|
|
562
658
|
repo_url: { type: "string" },
|
|
563
659
|
system_path: { type: "string" },
|
package/src/server.js
CHANGED
|
File without changes
|