@starlove/orbit 1.1.2 → 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 +0 -0
- 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 +0 -0
- 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 +0 -0
- 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 +0 -0
- 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 +1 -0
- 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 +176 -11
- 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 +32 -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 +45 -19
- package/src/mcp-server.js +102 -27
- 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/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
|
|
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
|
-
"Return the default lean context pack for a ticket: ticket fields, board identity only, relations, blockers, parent/children, and related ticket summaries. Project manual/journal and comments are intentionally omitted; use board_context for board manual/journal and board_read_comments for comment threads.",
|
|
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: {
|
|
@@ -264,7 +266,7 @@ const TOOL_DEFS = [
|
|
|
264
266
|
{
|
|
265
267
|
name: "board_get_ticket_context_full",
|
|
266
268
|
description:
|
|
267
|
-
"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. Comments are still intentionally omitted; use board_read_comments for comment threads.",
|
|
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.",
|
|
268
270
|
inputSchema: {
|
|
269
271
|
type: "object",
|
|
270
272
|
properties: {
|
|
@@ -285,7 +287,7 @@ const TOOL_DEFS = [
|
|
|
285
287
|
{
|
|
286
288
|
name: "board_get_agent_dispatch_packet",
|
|
287
289
|
description:
|
|
288
|
-
"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.",
|
|
289
291
|
inputSchema: {
|
|
290
292
|
type: "object",
|
|
291
293
|
properties: {
|
|
@@ -304,7 +306,7 @@ const TOOL_DEFS = [
|
|
|
304
306
|
{
|
|
305
307
|
name: "board_read_ticket",
|
|
306
308
|
description:
|
|
307
|
-
"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.",
|
|
308
310
|
inputSchema: {
|
|
309
311
|
type: "object",
|
|
310
312
|
properties: {
|
|
@@ -322,7 +324,7 @@ const TOOL_DEFS = [
|
|
|
322
324
|
{
|
|
323
325
|
name: "board_read_comments",
|
|
324
326
|
description:
|
|
325
|
-
"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.",
|
|
326
328
|
inputSchema: {
|
|
327
329
|
type: "object",
|
|
328
330
|
properties: {
|
|
@@ -339,7 +341,7 @@ const TOOL_DEFS = [
|
|
|
339
341
|
},
|
|
340
342
|
{
|
|
341
343
|
name: "board_get_ticket_relations",
|
|
342
|
-
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.",
|
|
343
345
|
inputSchema: {
|
|
344
346
|
type: "object",
|
|
345
347
|
properties: {
|
|
@@ -355,7 +357,7 @@ const TOOL_DEFS = [
|
|
|
355
357
|
},
|
|
356
358
|
{
|
|
357
359
|
name: "board_get_ticket_blockers",
|
|
358
|
-
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.",
|
|
359
361
|
inputSchema: {
|
|
360
362
|
type: "object",
|
|
361
363
|
properties: {
|
|
@@ -372,7 +374,7 @@ const TOOL_DEFS = [
|
|
|
372
374
|
{
|
|
373
375
|
name: "board_search",
|
|
374
376
|
description:
|
|
375
|
-
"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.",
|
|
376
378
|
inputSchema: {
|
|
377
379
|
type: "object",
|
|
378
380
|
properties: {
|
|
@@ -394,7 +396,7 @@ const TOOL_DEFS = [
|
|
|
394
396
|
{
|
|
395
397
|
name: "board_create_ticket",
|
|
396
398
|
description:
|
|
397
|
-
"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.",
|
|
398
400
|
inputSchema: {
|
|
399
401
|
type: "object",
|
|
400
402
|
properties: {
|
|
@@ -420,11 +422,14 @@ const TOOL_DEFS = [
|
|
|
420
422
|
{
|
|
421
423
|
name: "board_update_ticket",
|
|
422
424
|
description:
|
|
423
|
-
"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.",
|
|
424
426
|
inputSchema: {
|
|
425
427
|
type: "object",
|
|
426
428
|
properties: {
|
|
427
429
|
ticket_id: { type: "string" },
|
|
430
|
+
board_id: { type: "string" },
|
|
431
|
+
board_slug: { type: "string" },
|
|
432
|
+
board: { type: "string" },
|
|
428
433
|
title: { type: "string" },
|
|
429
434
|
description: { type: "string" },
|
|
430
435
|
type: { type: "string" },
|
|
@@ -443,11 +448,14 @@ const TOOL_DEFS = [
|
|
|
443
448
|
},
|
|
444
449
|
{
|
|
445
450
|
name: "board_add_comment",
|
|
446
|
-
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.",
|
|
447
452
|
inputSchema: {
|
|
448
453
|
type: "object",
|
|
449
454
|
properties: {
|
|
450
455
|
ticket_id: { type: "string" },
|
|
456
|
+
board_id: { type: "string" },
|
|
457
|
+
board_slug: { type: "string" },
|
|
458
|
+
board: { type: "string" },
|
|
451
459
|
body: { type: "string" },
|
|
452
460
|
kind: { type: "string" }
|
|
453
461
|
},
|
|
@@ -456,14 +464,73 @@ const TOOL_DEFS = [
|
|
|
456
464
|
},
|
|
457
465
|
handler: ({ ticket_id, ...body }) => orbitClient.addComment({ ticket_id, ...body })
|
|
458
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
|
+
},
|
|
459
525
|
{
|
|
460
526
|
name: "board_add_board_entry",
|
|
461
|
-
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.",
|
|
462
528
|
inputSchema: {
|
|
463
529
|
type: "object",
|
|
464
530
|
properties: {
|
|
465
531
|
board_id: { type: "string" },
|
|
466
532
|
board_slug: { type: "string" },
|
|
533
|
+
board: { type: "string" },
|
|
467
534
|
type: { type: "string", enum: ["decision", "lesson"] },
|
|
468
535
|
title: { type: "string" },
|
|
469
536
|
body: { type: "string" },
|
|
@@ -477,11 +544,14 @@ const TOOL_DEFS = [
|
|
|
477
544
|
{
|
|
478
545
|
name: "board_checkpoint",
|
|
479
546
|
description:
|
|
480
|
-
"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.",
|
|
481
548
|
inputSchema: {
|
|
482
549
|
type: "object",
|
|
483
550
|
properties: {
|
|
484
551
|
ticket_id: { type: "string" },
|
|
552
|
+
board_id: { type: "string" },
|
|
553
|
+
board_slug: { type: "string" },
|
|
554
|
+
board: { type: "string" },
|
|
485
555
|
message: { type: "string" }
|
|
486
556
|
},
|
|
487
557
|
required: ["ticket_id", "message"],
|
|
@@ -492,11 +562,14 @@ const TOOL_DEFS = [
|
|
|
492
562
|
{
|
|
493
563
|
name: "board_complete",
|
|
494
564
|
description:
|
|
495
|
-
"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.",
|
|
496
566
|
inputSchema: {
|
|
497
567
|
type: "object",
|
|
498
568
|
properties: {
|
|
499
569
|
ticket_id: { type: "string" },
|
|
570
|
+
board_id: { type: "string" },
|
|
571
|
+
board_slug: { type: "string" },
|
|
572
|
+
board: { type: "string" },
|
|
500
573
|
summary: { type: "string" },
|
|
501
574
|
updates: { type: "string" },
|
|
502
575
|
pr_url: { type: "string" },
|
|
@@ -510,10 +583,10 @@ const TOOL_DEFS = [
|
|
|
510
583
|
{
|
|
511
584
|
name: "board_archive_ticket",
|
|
512
585
|
description:
|
|
513
|
-
"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.",
|
|
514
587
|
inputSchema: {
|
|
515
588
|
type: "object",
|
|
516
|
-
properties: { ticket_id: { type: "string" } },
|
|
589
|
+
properties: { ticket_id: { type: "string" }, board_id: { type: "string" }, board_slug: { type: "string" }, board: { type: "string" } },
|
|
517
590
|
required: ["ticket_id"],
|
|
518
591
|
additionalProperties: false
|
|
519
592
|
},
|
|
@@ -521,10 +594,10 @@ const TOOL_DEFS = [
|
|
|
521
594
|
},
|
|
522
595
|
{
|
|
523
596
|
name: "board_restore_ticket",
|
|
524
|
-
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.",
|
|
525
598
|
inputSchema: {
|
|
526
599
|
type: "object",
|
|
527
|
-
properties: { ticket_id: { type: "string" } },
|
|
600
|
+
properties: { ticket_id: { type: "string" }, board_id: { type: "string" }, board_slug: { type: "string" }, board: { type: "string" } },
|
|
528
601
|
required: ["ticket_id"],
|
|
529
602
|
additionalProperties: false
|
|
530
603
|
},
|
|
@@ -533,10 +606,10 @@ const TOOL_DEFS = [
|
|
|
533
606
|
{
|
|
534
607
|
name: "board_delete_ticket",
|
|
535
608
|
description:
|
|
536
|
-
"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.",
|
|
537
610
|
inputSchema: {
|
|
538
611
|
type: "object",
|
|
539
|
-
properties: { ticket_id: { type: "string" } },
|
|
612
|
+
properties: { ticket_id: { type: "string" }, board_id: { type: "string" }, board_slug: { type: "string" }, board: { type: "string" } },
|
|
540
613
|
required: ["ticket_id"],
|
|
541
614
|
additionalProperties: false
|
|
542
615
|
},
|
|
@@ -557,12 +630,13 @@ const TOOL_DEFS = [
|
|
|
557
630
|
},
|
|
558
631
|
{
|
|
559
632
|
name: "board_export_board",
|
|
560
|
-
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.",
|
|
561
634
|
inputSchema: {
|
|
562
635
|
type: "object",
|
|
563
636
|
properties: {
|
|
564
637
|
board_id: { type: "string" },
|
|
565
638
|
board_slug: { type: "string" },
|
|
639
|
+
board: { type: "string" },
|
|
566
640
|
include_attachments: { type: "boolean", description: "Embed attached image bytes in the JSON snapshot." },
|
|
567
641
|
include_images: { type: "boolean", description: "Alias for include_attachments." }
|
|
568
642
|
},
|
|
@@ -573,12 +647,13 @@ const TOOL_DEFS = [
|
|
|
573
647
|
{
|
|
574
648
|
name: "board_update_settings",
|
|
575
649
|
description:
|
|
576
|
-
"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.",
|
|
577
651
|
inputSchema: {
|
|
578
652
|
type: "object",
|
|
579
653
|
properties: {
|
|
580
654
|
board_id: { type: "string" },
|
|
581
655
|
board_slug: { type: "string" },
|
|
656
|
+
board: { type: "string" },
|
|
582
657
|
name: { type: "string" },
|
|
583
658
|
repo_url: { type: "string" },
|
|
584
659
|
system_path: { type: "string" },
|
package/src/server.js
CHANGED
|
File without changes
|