@rallycry/conveyor-mcp 5.0.5 → 5.0.7
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/cli.js +134 -28
- package/dist/{connection-DclP31lm.d.ts → connection-DeBZ_T6f.d.ts} +9 -0
- package/dist/index.d.ts +1 -1
- package/dist/tunnel.d.ts +1 -1
- package/dist/wait-runner.d.ts +1 -1
- package/dist/wait.d.ts +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -72,14 +72,14 @@ function registerProjectTools(server2, conn2) {
|
|
|
72
72
|
// src/tools/connection.ts
|
|
73
73
|
import { z as z4 } from "zod";
|
|
74
74
|
|
|
75
|
-
// ../shared/dist/chunk-
|
|
75
|
+
// ../shared/dist/chunk-U3HGG5NX.js
|
|
76
76
|
import { z as z2 } from "zod";
|
|
77
77
|
var DEFAULT_SONNET_MODEL = "claude-sonnet-5";
|
|
78
|
-
var DEFAULT_OPUS_MODEL = "claude-opus-5";
|
|
78
|
+
var DEFAULT_OPUS_MODEL = "claude-opus-5-5";
|
|
79
79
|
var DEFAULT_HAIKU_MODEL = "claude-haiku-4-5-20251001";
|
|
80
80
|
var FABLE_MODEL = "claude-fable-5-1";
|
|
81
81
|
var PREVIOUS_SONNET_MODEL = "claude-sonnet-4-6";
|
|
82
|
-
var PREVIOUS_OPUS_MODEL = "claude-opus-
|
|
82
|
+
var PREVIOUS_OPUS_MODEL = "claude-opus-5";
|
|
83
83
|
var PTY_STREAM_PORT_BASE = 7420;
|
|
84
84
|
var PTY_STREAM_PORT_ATTEMPTS = 8;
|
|
85
85
|
var PREVIEW_PORT_DENY_LIST = [
|
|
@@ -1118,6 +1118,11 @@ var uploadAttachmentContract = defineToolContract({
|
|
|
1118
1118
|
title: f.optional(
|
|
1119
1119
|
f.string({ desc: "Short caption posted with the file (defaults to the file name)" })
|
|
1120
1120
|
),
|
|
1121
|
+
comment: f.optional(
|
|
1122
|
+
f.string({
|
|
1123
|
+
desc: "Alias of `title` (the external conveyor-mcp surface names this field `comment`). Provide at most one of the two."
|
|
1124
|
+
})
|
|
1125
|
+
),
|
|
1121
1126
|
tags: attachmentTags
|
|
1122
1127
|
}
|
|
1123
1128
|
},
|
|
@@ -1130,6 +1135,11 @@ var uploadAttachmentContract = defineToolContract({
|
|
|
1130
1135
|
comment: f.optional(
|
|
1131
1136
|
f.string({ desc: "When set, also posts the attachment to the task chat with this text" })
|
|
1132
1137
|
),
|
|
1138
|
+
title: f.optional(
|
|
1139
|
+
f.string({
|
|
1140
|
+
desc: "Alias of `comment` (the in-pod agent surface names this field `title`). Provide at most one of the two."
|
|
1141
|
+
})
|
|
1142
|
+
),
|
|
1133
1143
|
tags: attachmentTags,
|
|
1134
1144
|
mimeType: f.optional(
|
|
1135
1145
|
f.string({ desc: "Override the mime type inferred from the file extension" })
|
|
@@ -1189,7 +1199,7 @@ var agentOption = f.object(
|
|
|
1189
1199
|
var createDecisionContract = defineToolContract({
|
|
1190
1200
|
name: "create_decision",
|
|
1191
1201
|
agent: {
|
|
1192
|
-
description: `Raise a product decision: a fork the plan cannot be right without. Two or three options, one default, a deadline. Run list_decisions FIRST \u2014 an answered decision is the answer, and re-asking it wastes everybody's time. Do NOT file a decision for an assumption you can simply state: an assumed behaviour belongs in the plan as a GIVEN / WHEN / THEN line under "Assumed behaviours". Returns the decision
|
|
1202
|
+
description: `Raise a product decision: a fork the plan cannot be right without. Two or three options, one default, a deadline. Run list_decisions FIRST \u2014 an answered decision is the answer, and re-asking it wastes everybody's time. Do NOT file a decision for an assumption you can simply state: an assumed behaviour belongs in the plan as a GIVEN / WHEN / THEN line under "Assumed behaviours". Returns the decision in full (the same JSON as get_decision, with option ids and the deadline) plus which cards were linked.`,
|
|
1193
1203
|
fields: {
|
|
1194
1204
|
question: f.string({
|
|
1195
1205
|
min: 1,
|
|
@@ -1226,6 +1236,16 @@ var createDecisionContract = defineToolContract({
|
|
|
1226
1236
|
),
|
|
1227
1237
|
raised_by_pr: f.optional(
|
|
1228
1238
|
f.number({ int: true, min: 1, desc: "PR number that surfaced the question" })
|
|
1239
|
+
),
|
|
1240
|
+
raised_by_card: f.optional(
|
|
1241
|
+
f.string({
|
|
1242
|
+
desc: "Slug or id of the card that raised the question. A link back, not a block \u2014 use impacted_cards to block a card."
|
|
1243
|
+
})
|
|
1244
|
+
),
|
|
1245
|
+
deadline_at: f.optional(
|
|
1246
|
+
f.string({
|
|
1247
|
+
desc: "Absolute deadline as an ISO 8601 timestamp, e.g. 2026-09-25T17:00:00Z. Wins over deadline_hours when both are given; must be in the future and within 720 hours."
|
|
1248
|
+
})
|
|
1229
1249
|
)
|
|
1230
1250
|
}
|
|
1231
1251
|
},
|
|
@@ -1249,6 +1269,16 @@ var createDecisionContract = defineToolContract({
|
|
|
1249
1269
|
tagNames: f.optional(f.array(f.string(), { desc: "Tag names to categorize the decision" })),
|
|
1250
1270
|
raisedByPr: f.optional(
|
|
1251
1271
|
f.number({ int: true, min: 1, desc: "PR number that surfaced the question" })
|
|
1272
|
+
),
|
|
1273
|
+
raisedByCard: f.optional(
|
|
1274
|
+
f.string({
|
|
1275
|
+
desc: "Slug or id of the card that raised the question. A link back, not a block \u2014 use impactedCards to block a card."
|
|
1276
|
+
})
|
|
1277
|
+
),
|
|
1278
|
+
deadlineAt: f.optional(
|
|
1279
|
+
f.string({
|
|
1280
|
+
desc: "Absolute deadline (ISO 8601). Wins over deadlineHours when both are given; must be in the future and within 720 hours."
|
|
1281
|
+
})
|
|
1252
1282
|
)
|
|
1253
1283
|
}
|
|
1254
1284
|
}
|
|
@@ -1256,7 +1286,7 @@ var createDecisionContract = defineToolContract({
|
|
|
1256
1286
|
var listDecisionsContract = defineToolContract({
|
|
1257
1287
|
name: "list_decisions",
|
|
1258
1288
|
agent: {
|
|
1259
|
-
description: `Search this project's decisions. Run this BEFORE planning anything in an area: "have we already decided how X behaves?"
|
|
1289
|
+
description: `Search this project's decisions. Run this BEFORE planning anything in an area: "have we already decided how X behaves?" Each row carries the summary, who raised it (and from which card or PR), when, and \u2014 once settled \u2014 the resolution, so the list doubles as the decision log. Filter by card to see what is blocking a specific card.`,
|
|
1260
1290
|
fields: {
|
|
1261
1291
|
status: f.optional(
|
|
1262
1292
|
f.enum(STATUS_LABELS, {
|
|
@@ -1288,7 +1318,7 @@ var listDecisionsContract = defineToolContract({
|
|
|
1288
1318
|
var getDecisionContract = defineToolContract({
|
|
1289
1319
|
name: "get_decision",
|
|
1290
1320
|
agent: {
|
|
1291
|
-
description: "Read one decision in full: its context, every option with its GIVEN / WHEN / THEN, every vote with who cast it and why, the running tally, the cards it blocks, and the resolution once there is one. Use read_task_chat with the same id for the discussion thread.",
|
|
1321
|
+
description: "Read one decision in full: its summary and context, who raised it and from where, every option with its GIVEN / WHEN / THEN, every vote with who cast it and why, the running tally, the cards it blocks, and the resolution once there is one. Use read_task_chat with the same id for the discussion thread.",
|
|
1292
1322
|
fields: {
|
|
1293
1323
|
decision: f.string({ min: 1, desc: "Decision slug or id" })
|
|
1294
1324
|
}
|
|
@@ -1353,10 +1383,32 @@ var resolveDecisionContract = defineToolContract({
|
|
|
1353
1383
|
var updateDecisionContract = defineToolContract({
|
|
1354
1384
|
name: "update_decision",
|
|
1355
1385
|
agent: {
|
|
1356
|
-
description: "Change an open decision:
|
|
1386
|
+
description: "Change an open decision: fix the question, summary, context or tags, rewrite the options while nobody has voted, move the deadline, link or unlink the cards it blocks, or cancel it. Cancelling un-blocks the impacted cards without answering the question, so only do it when the question stopped mattering.",
|
|
1357
1387
|
fields: {
|
|
1358
1388
|
decision: f.string({ min: 1, desc: "Decision slug or id" }),
|
|
1389
|
+
question: f.optional(f.string({ min: 1, desc: "New question, one plain sentence" })),
|
|
1390
|
+
summary: f.optional(
|
|
1391
|
+
f.string({ desc: cardDescriptionDesc("New one- or two-sentence summary") })
|
|
1392
|
+
),
|
|
1393
|
+
context: f.optional(f.string({ min: 1, desc: "New markdown background" })),
|
|
1394
|
+
options: f.optional(
|
|
1395
|
+
f.array(agentOption, {
|
|
1396
|
+
min: 2,
|
|
1397
|
+
desc: "Replacement options. Accepted only while the decision has no votes \u2014 once somebody has voted, cancel it and raise a new one instead. Send default_option with it: the old default no longer exists."
|
|
1398
|
+
})
|
|
1399
|
+
),
|
|
1400
|
+
default_option: f.optional(
|
|
1401
|
+
f.number({ int: true, min: 1, max: 3, desc: "1-based position of the new default" })
|
|
1402
|
+
),
|
|
1403
|
+
tag_names: f.optional(
|
|
1404
|
+
f.array(f.string(), { desc: "Replacement tag names (replaces the current set)" })
|
|
1405
|
+
),
|
|
1359
1406
|
deadline_hours: f.optional(f.number({ desc: "New deadline, in hours from now. 1 to 720." })),
|
|
1407
|
+
deadline_at: f.optional(
|
|
1408
|
+
f.string({
|
|
1409
|
+
desc: "New absolute deadline (ISO 8601). Wins over deadline_hours; must be in the future and within 720 hours."
|
|
1410
|
+
})
|
|
1411
|
+
),
|
|
1360
1412
|
add_impacted_cards: f.optional(
|
|
1361
1413
|
f.array(f.string(), { desc: "Slugs or ids of cards to block on this decision" })
|
|
1362
1414
|
),
|
|
@@ -1371,13 +1423,29 @@ var updateDecisionContract = defineToolContract({
|
|
|
1371
1423
|
}
|
|
1372
1424
|
},
|
|
1373
1425
|
mcp: {
|
|
1374
|
-
description: "Change an open Conveyor decision:
|
|
1426
|
+
description: "Change an open Conveyor decision: fix the question, summary, context or tags, rewrite the options while nobody has voted, move the deadline, link or unlink impacted cards, cancel it, or reopen a settled one.",
|
|
1375
1427
|
fields: {
|
|
1376
1428
|
projectId: mcpProjectId,
|
|
1377
1429
|
decision: f.string({ desc: "Decision slug or id" }),
|
|
1430
|
+
question: f.optional(f.string({ desc: "New question" })),
|
|
1431
|
+
summary: f.optional(f.string({ desc: cardDescriptionDesc("New summary") })),
|
|
1432
|
+
context: f.optional(f.string({ desc: "New markdown background" })),
|
|
1433
|
+
options: f.optional(
|
|
1434
|
+
f.array(agentOption, {
|
|
1435
|
+
min: 2,
|
|
1436
|
+
desc: "Replacement options. Accepted only while the decision has no votes. Send defaultOption with it: the old default no longer exists."
|
|
1437
|
+
})
|
|
1438
|
+
),
|
|
1439
|
+
defaultOption: f.optional(
|
|
1440
|
+
f.number({ int: true, min: 1, max: 3, desc: "1-based position of the new default" })
|
|
1441
|
+
),
|
|
1442
|
+
tagNames: f.optional(f.array(f.string(), { desc: "Replacement tag names" })),
|
|
1378
1443
|
deadlineHours: f.optional(
|
|
1379
1444
|
f.number({ min: 1, max: 720, desc: "New deadline, in hours from now" })
|
|
1380
1445
|
),
|
|
1446
|
+
deadlineAt: f.optional(
|
|
1447
|
+
f.string({ desc: "New absolute deadline (ISO 8601). Wins over deadlineHours." })
|
|
1448
|
+
),
|
|
1381
1449
|
addImpactedCards: f.optional(
|
|
1382
1450
|
f.array(f.string(), { desc: "Slugs or ids of cards to block on this decision" })
|
|
1383
1451
|
),
|
|
@@ -2376,13 +2444,22 @@ function registerProjectConfigTools(server2, conn2) {
|
|
|
2376
2444
|
import { z as z6 } from "zod";
|
|
2377
2445
|
|
|
2378
2446
|
// src/tools/tasks-format.ts
|
|
2447
|
+
function formatCompletedMeta(data) {
|
|
2448
|
+
const parts = [];
|
|
2449
|
+
const usage = data.usage;
|
|
2450
|
+
const total = typeof usage === "object" && usage !== null ? usage.totalTokens : void 0;
|
|
2451
|
+
if (typeof total === "number" && total > 0) parts.push(`tokens: ${total}`);
|
|
2452
|
+
if (typeof data.costUsd === "number") parts.push(`cost: $${data.costUsd}`);
|
|
2453
|
+
parts.push(`duration: ${typeof data.durationMs === "number" ? data.durationMs : "?"}ms`);
|
|
2454
|
+
return parts.join(", ");
|
|
2455
|
+
}
|
|
2379
2456
|
var CLI_EVENT_FORMATTERS = {
|
|
2380
2457
|
thinking: (data) => String(data.message ?? ""),
|
|
2381
2458
|
tool_use: (data) => `${data.tool}: ${String(data.input ?? "").slice(0, 1e3)}`,
|
|
2382
2459
|
tool_result: (data) => `${data.tool} \u2192 ${String(data.output ?? "").slice(0, 500)}${data.isError ? " [ERROR]" : ""}`,
|
|
2383
2460
|
message: (data) => String(data.content ?? ""),
|
|
2384
2461
|
error: (data) => `ERROR: ${String(data.message ?? "")}`,
|
|
2385
|
-
completed: (data) => `Completed: ${data.summary ?? ""} (
|
|
2462
|
+
completed: (data) => `Completed: ${data.summary ?? ""} (${formatCompletedMeta(data)})`,
|
|
2386
2463
|
setup_output: (data) => `[${data.stream ?? "stdout"}] ${String(data.data ?? "")}`,
|
|
2387
2464
|
start_command_output: (data) => `[${data.stream ?? "stdout"}] ${String(data.data ?? "")}`,
|
|
2388
2465
|
turn_end: (data) => `Turn complete (${Array.isArray(data.toolCalls) ? data.toolCalls.length : 0} tool calls)`
|
|
@@ -2406,7 +2483,7 @@ function compactChatMessage(message) {
|
|
|
2406
2483
|
return obj;
|
|
2407
2484
|
}
|
|
2408
2485
|
function formatLegacyComputeSession(s) {
|
|
2409
|
-
return ` - session ${s.id} [${s.provider}] pod=${s.instanceName ?? "-"} status=${s.status} runner=${s.agentRunnerStatus ?? "-"} lastHeartbeat=${s.lastHeartbeatAt ?? "-"} created=${s.createdAt} stopped=${s.stoppedAt ?? "-"}` + (s.deletionRequestedAt ? ` deletionRequested=${s.deletionRequestedAt} (attempts ${s.deletionAttempts})` : "") + (s.lastAgentEvent ? ` lastAgentEvent=${s.lastAgentEvent}` : "");
|
|
2486
|
+
return ` - session ${s.id} [${s.provider}] pod=${s.instanceName ?? "-"} status=${s.status} runner=${s.agentRunnerStatus ?? "-"} lastHeartbeat=${s.lastHeartbeatAt ?? "-"} created=${s.createdAt} stopped=${s.stoppedAt ?? "-"}` + (s.deletionRequestedAt ? ` deletionRequested=${s.deletionRequestedAt} (attempts ${s.deletionAttempts})` : "") + (s.lastAgentEvent ? ` lastAgentEvent=${s.lastAgentEvent}` : "") + (s.tokenUsage ? ` tokens=${s.tokenUsage.totalTokens} (${s.tokenUsage.turns} turns)` : "");
|
|
2410
2487
|
}
|
|
2411
2488
|
function formatWorkspaceSession(s) {
|
|
2412
2489
|
return ` - workspaceSession ${s.id} role=${s.role} mode=${s.mode} status=${s.status} leaseUntil=${s.leaseUntil ?? "-"} created=${s.createdAt}`;
|
|
@@ -2471,7 +2548,7 @@ var STATUS_ENUM2 = [
|
|
|
2471
2548
|
"Complete",
|
|
2472
2549
|
"Cancelled"
|
|
2473
2550
|
];
|
|
2474
|
-
var CARD_TYPE_ENUM = ["task", "incident", "suggestion"];
|
|
2551
|
+
var CARD_TYPE_ENUM = ["task", "incident", "suggestion", "decision"];
|
|
2475
2552
|
var RISK_ENUM2 = ["critical", "high", "medium", "low"];
|
|
2476
2553
|
var BOARD_FILTER = z6.string().nullable().optional().describe(
|
|
2477
2554
|
"Filter to a sub-project board. Omit to use the connection's default board (CONVEYOR_SUBPROJECT_ID) when set, else the whole project; pass null to force the whole project. Use list_accessible_subprojects to find board IDs."
|
|
@@ -2483,7 +2560,7 @@ function registerListTasks(server2, conn2) {
|
|
|
2483
2560
|
registerHotTool(
|
|
2484
2561
|
server2,
|
|
2485
2562
|
"list_tasks",
|
|
2486
|
-
"List project cards, optionally filtered by card type, status, or assignment (a specific assignee, or unassigned tasks). Defaults to type=task \u2014 pass typeFilters to list incidents
|
|
2563
|
+
"List project cards, optionally filtered by card type, status, or assignment (a specific assignee, or unassigned tasks). Defaults to type=task \u2014 pass typeFilters to list incidents, suggestions or decisions. Results are relevance-ordered: highest priority first then newest; suggestions-only queries rank by upvote score. Pass projectId to target a specific project; otherwise the configured default project is used. Returns summaries \u2014 plan omitted, description truncated; use get_task for full details.",
|
|
2487
2564
|
{
|
|
2488
2565
|
projectId: z6.string().optional().describe("Target Conveyor project ID"),
|
|
2489
2566
|
status: z6.enum(STATUS_ENUM2).optional().describe("Filter by task status"),
|
|
@@ -3029,10 +3106,11 @@ function registerUploadAttachment(server2, conn2) {
|
|
|
3029
3106
|
]
|
|
3030
3107
|
};
|
|
3031
3108
|
}
|
|
3109
|
+
const comment = params.comment ?? params.title;
|
|
3032
3110
|
const result = await conn2.confirmFileUpload(
|
|
3033
3111
|
params.taskId,
|
|
3034
3112
|
fileId,
|
|
3035
|
-
|
|
3113
|
+
comment,
|
|
3036
3114
|
params.projectId,
|
|
3037
3115
|
params.tags
|
|
3038
3116
|
);
|
|
@@ -3041,6 +3119,11 @@ function registerUploadAttachment(server2, conn2) {
|
|
|
3041
3119
|
];
|
|
3042
3120
|
if (result.downloadUrl) lines.push(`downloadUrl: ${result.downloadUrl}`);
|
|
3043
3121
|
if (result.messageId) lines.push("Posted to the task chat.");
|
|
3122
|
+
else if (comment === void 0) {
|
|
3123
|
+
lines.push(
|
|
3124
|
+
"Not posted to the task chat \u2014 pass `comment` (or `title`) to show it in the card thread."
|
|
3125
|
+
);
|
|
3126
|
+
}
|
|
3044
3127
|
if (result.appliedTags?.length) lines.push(`Tagged: ${result.appliedTags.join(", ")}.`);
|
|
3045
3128
|
if (result.unknownTags?.length) {
|
|
3046
3129
|
lines.push(
|
|
@@ -3627,6 +3710,13 @@ var TurnEndToolCallSchema = z22.object({
|
|
|
3627
3710
|
output: z22.string().optional(),
|
|
3628
3711
|
timestamp: z22.string().optional()
|
|
3629
3712
|
}).passthrough();
|
|
3713
|
+
var AgentTurnUsageSchema = z22.object({
|
|
3714
|
+
inputTokens: z22.number(),
|
|
3715
|
+
outputTokens: z22.number(),
|
|
3716
|
+
cacheReadInputTokens: z22.number(),
|
|
3717
|
+
cacheCreationInputTokens: z22.number(),
|
|
3718
|
+
totalTokens: z22.number()
|
|
3719
|
+
});
|
|
3630
3720
|
var KnownAgentEventSchema = z22.discriminatedUnion("type", [
|
|
3631
3721
|
// ── Lifecycle / connection ────────────────────────────────────────────
|
|
3632
3722
|
z22.object({
|
|
@@ -3666,7 +3756,11 @@ var KnownAgentEventSchema = z22.discriminatedUnion("type", [
|
|
|
3666
3756
|
z22.object({
|
|
3667
3757
|
type: z22.literal("completed"),
|
|
3668
3758
|
summary: z22.string().optional(),
|
|
3669
|
-
durationMs: z22.number().optional()
|
|
3759
|
+
durationMs: z22.number().optional(),
|
|
3760
|
+
/** Tokens this turn consumed, summed from the transcript's assistant
|
|
3761
|
+
* records. Optional: an older agent build sends none, and the server
|
|
3762
|
+
* then records nothing rather than zeroing the session's totals. */
|
|
3763
|
+
usage: AgentTurnUsageSchema.optional()
|
|
3670
3764
|
}).passthrough(),
|
|
3671
3765
|
z22.object({ type: z22.literal("error"), message: z22.string() }).passthrough(),
|
|
3672
3766
|
z22.object({ type: z22.literal("agent_typing_start") }).passthrough(),
|
|
@@ -5091,6 +5185,10 @@ var CancelDecisionRequestSchema = z102.object({
|
|
|
5091
5185
|
/** Why it is being dropped. Posted to the decision thread. */
|
|
5092
5186
|
reason: z102.string().max(DECISION_RESOLUTION_MAX).optional()
|
|
5093
5187
|
});
|
|
5188
|
+
var BulkDecisionIdsRequestSchema = z102.object({
|
|
5189
|
+
projectId: z102.string().cuid("Invalid project ID"),
|
|
5190
|
+
decisionIds: z102.array(z102.string().cuid()).min(1).max(200)
|
|
5191
|
+
});
|
|
5094
5192
|
var ReopenDecisionRequestSchema = z102.object({
|
|
5095
5193
|
decisionId: decisionIdSchema,
|
|
5096
5194
|
deadlineHours: z102.number().min(DECISION_DEADLINE_MIN_HOURS).max(DECISION_DEADLINE_MAX_HOURS).optional()
|
|
@@ -5147,6 +5245,10 @@ var CreateProjectDecisionRequestSchema = z11.object({
|
|
|
5147
5245
|
sessionId: z11.string().optional(),
|
|
5148
5246
|
tagNames: z11.array(z11.string().min(1)).max(10).optional(),
|
|
5149
5247
|
raisedByPr: z11.number().int().positive().optional(),
|
|
5248
|
+
/** Slug or id of the card that raised the question. A link back, not a block. */
|
|
5249
|
+
raisedByCard: z11.string().min(1).optional(),
|
|
5250
|
+
/** Absolute deadline (ISO 8601). Wins over `deadlineHours` when both are sent. */
|
|
5251
|
+
deadlineAt: z11.string().datetime({ offset: true }).optional(),
|
|
5150
5252
|
requestingUserId: z11.string().optional()
|
|
5151
5253
|
});
|
|
5152
5254
|
var ListProjectDecisionsRequestSchema = z11.object({
|
|
@@ -5182,7 +5284,16 @@ var ResolveProjectDecisionRequestSchema = z11.object({
|
|
|
5182
5284
|
var UpdateProjectDecisionRequestSchema = z11.object({
|
|
5183
5285
|
projectId: z11.string(),
|
|
5184
5286
|
decision: z11.string().min(1),
|
|
5287
|
+
question: z11.string().min(1).max(200).optional(),
|
|
5288
|
+
summary: z11.string().max(CARD_DESCRIPTION_MAX).optional(),
|
|
5289
|
+
context: z11.string().min(1).optional(),
|
|
5290
|
+
/** Accepted only while nobody has voted. */
|
|
5291
|
+
options: optionsInput.optional(),
|
|
5292
|
+
defaultOption: z11.number().int().min(1).max(DECISION_OPTIONS_MAX).optional(),
|
|
5293
|
+
tagNames: z11.array(z11.string().min(1)).max(10).optional(),
|
|
5185
5294
|
deadlineHours,
|
|
5295
|
+
/** Absolute deadline (ISO 8601). Wins over `deadlineHours` when both are sent. */
|
|
5296
|
+
deadlineAt: z11.string().datetime({ offset: true }).optional(),
|
|
5186
5297
|
addImpactedCards: z11.array(z11.string().min(1)).max(50).optional(),
|
|
5187
5298
|
removeImpactedCards: z11.array(z11.string().min(1)).max(50).optional(),
|
|
5188
5299
|
status: z11.enum(["Cancelled", "Open"]).optional(),
|
|
@@ -5342,8 +5453,8 @@ function anthropicEntry(model, label, inputPerMillion, outputPerMillion, opts =
|
|
|
5342
5453
|
};
|
|
5343
5454
|
}
|
|
5344
5455
|
var ANTHROPIC_CATALOG = [
|
|
5345
|
-
anthropicEntry(DEFAULT_OPUS_MODEL, "Opus 5 Latest",
|
|
5346
|
-
anthropicEntry(PREVIOUS_OPUS_MODEL, "Opus
|
|
5456
|
+
anthropicEntry(DEFAULT_OPUS_MODEL, "Opus 5.5 Latest", 4, 20),
|
|
5457
|
+
anthropicEntry(PREVIOUS_OPUS_MODEL, "Opus 5", 5, 25),
|
|
5347
5458
|
anthropicEntry(DEFAULT_SONNET_MODEL, "Sonnet 5 Latest", 3, 15),
|
|
5348
5459
|
anthropicEntry(PREVIOUS_SONNET_MODEL, "Sonnet 4.6", 3, 15),
|
|
5349
5460
|
// The Haiku line (4.5 and older) predates the tuning surface and 400s on it.
|
|
@@ -5867,23 +5978,18 @@ function registerDecisionReads(server2, conn2) {
|
|
|
5867
5978
|
}
|
|
5868
5979
|
function registerDecisionWrites(server2, conn2) {
|
|
5869
5980
|
registerContractTool(server2, createDecisionContract, async (params) => {
|
|
5870
|
-
const
|
|
5871
|
-
const
|
|
5872
|
-
|
|
5873
|
-
|
|
5874
|
-
deadlineHours: deadlineHours2,
|
|
5875
|
-
impactedCards,
|
|
5876
|
-
tagNames,
|
|
5877
|
-
raisedByPr
|
|
5878
|
-
});
|
|
5879
|
-
const refused = res.refused.length > 0 ? `
|
|
5880
|
-
Not linked: ${res.refused.map((r) => `${r.ref} (${r.reason})`).join("; ")}` : "";
|
|
5981
|
+
const res = await conn2.createDecision(params);
|
|
5982
|
+
const { impactedLinked, refused, ...detail } = res;
|
|
5983
|
+
const refusedLine = refused.length > 0 ? `
|
|
5984
|
+
Not linked: ${refused.map((r) => `${r.ref} (${r.reason})`).join("; ")}` : "";
|
|
5881
5985
|
return {
|
|
5882
5986
|
content: [
|
|
5883
5987
|
{
|
|
5884
5988
|
type: "text",
|
|
5885
5989
|
text: `Raised decision ${res.slug} \u2014 ${res.url}
|
|
5886
|
-
Blocking ${
|
|
5990
|
+
Blocking ${impactedLinked.length} card(s).${refusedLine}
|
|
5991
|
+
|
|
5992
|
+
${JSON.stringify(detail, null, 2)}`
|
|
5887
5993
|
}
|
|
5888
5994
|
]
|
|
5889
5995
|
};
|
|
@@ -585,6 +585,15 @@ declare class ConveyorConnection {
|
|
|
585
585
|
lastHeartbeatAt: string | null;
|
|
586
586
|
agentRunningAt: string | null;
|
|
587
587
|
lastAgentEvent: string | null;
|
|
588
|
+
/** Tokens this session's turns consumed, or null when none recorded. */
|
|
589
|
+
tokenUsage: {
|
|
590
|
+
inputTokens: number;
|
|
591
|
+
outputTokens: number;
|
|
592
|
+
cacheReadInputTokens: number;
|
|
593
|
+
cacheCreationInputTokens: number;
|
|
594
|
+
totalTokens: number;
|
|
595
|
+
turns: number;
|
|
596
|
+
} | null;
|
|
588
597
|
deletionRequestedAt: string | null;
|
|
589
598
|
deletionAttempts: number;
|
|
590
599
|
createdAt: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as ActivePtySession, d as ConveyorConnection, e as ConveyorMcpConfig, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-
|
|
1
|
+
export { A as ActivePtySession, d as ConveyorConnection, e as ConveyorMcpConfig, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-DeBZ_T6f.js';
|
|
2
2
|
export { AttachTunnelOptions, ResolvedPtySession, RunTunnelOptions, TunnelConnection, TunnelHandle, TunnelSession, TunnelTty, WaitForPtySessionOptions, attachTunnel, runTunnel, waitForPtySession } from './tunnel.js';
|
|
3
3
|
import 'socket.io-client';
|
|
4
4
|
import '@project/shared';
|
package/dist/tunnel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as ActivePtySession, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-
|
|
1
|
+
import { A as ActivePtySession, P as PtyAttachSnapshot, c as PtyDataChunk } from './connection-DeBZ_T6f.js';
|
|
2
2
|
import 'socket.io-client';
|
|
3
3
|
import '@project/shared';
|
|
4
4
|
|
package/dist/wait-runner.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CardCollectionPage, a as CardCollectionDelta } from './connection-
|
|
1
|
+
import { C as CardCollectionPage, a as CardCollectionDelta } from './connection-DeBZ_T6f.js';
|
|
2
2
|
import { WaitFilter, WaitResult } from './wait.js';
|
|
3
3
|
import 'socket.io-client';
|
|
4
4
|
import '@project/shared';
|
package/dist/wait.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rallycry/conveyor-mcp",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.7",
|
|
4
4
|
"description": "Conveyor MCP server for Claude Code PM integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -45,6 +45,6 @@
|
|
|
45
45
|
"@types/ws": "^8.18.1",
|
|
46
46
|
"tsup": "^8.0.0",
|
|
47
47
|
"typescript": "^5.3.0",
|
|
48
|
-
"vitest": "^
|
|
48
|
+
"vitest": "^5.0.1"
|
|
49
49
|
}
|
|
50
50
|
}
|