@rallycry/conveyor-mcp 5.0.5 → 5.0.6
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 +125 -23
- 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 +1 -1
package/dist/cli.js
CHANGED
|
@@ -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(),
|
|
@@ -5147,6 +5241,10 @@ var CreateProjectDecisionRequestSchema = z11.object({
|
|
|
5147
5241
|
sessionId: z11.string().optional(),
|
|
5148
5242
|
tagNames: z11.array(z11.string().min(1)).max(10).optional(),
|
|
5149
5243
|
raisedByPr: z11.number().int().positive().optional(),
|
|
5244
|
+
/** Slug or id of the card that raised the question. A link back, not a block. */
|
|
5245
|
+
raisedByCard: z11.string().min(1).optional(),
|
|
5246
|
+
/** Absolute deadline (ISO 8601). Wins over `deadlineHours` when both are sent. */
|
|
5247
|
+
deadlineAt: z11.string().datetime({ offset: true }).optional(),
|
|
5150
5248
|
requestingUserId: z11.string().optional()
|
|
5151
5249
|
});
|
|
5152
5250
|
var ListProjectDecisionsRequestSchema = z11.object({
|
|
@@ -5182,7 +5280,16 @@ var ResolveProjectDecisionRequestSchema = z11.object({
|
|
|
5182
5280
|
var UpdateProjectDecisionRequestSchema = z11.object({
|
|
5183
5281
|
projectId: z11.string(),
|
|
5184
5282
|
decision: z11.string().min(1),
|
|
5283
|
+
question: z11.string().min(1).max(200).optional(),
|
|
5284
|
+
summary: z11.string().max(CARD_DESCRIPTION_MAX).optional(),
|
|
5285
|
+
context: z11.string().min(1).optional(),
|
|
5286
|
+
/** Accepted only while nobody has voted. */
|
|
5287
|
+
options: optionsInput.optional(),
|
|
5288
|
+
defaultOption: z11.number().int().min(1).max(DECISION_OPTIONS_MAX).optional(),
|
|
5289
|
+
tagNames: z11.array(z11.string().min(1)).max(10).optional(),
|
|
5185
5290
|
deadlineHours,
|
|
5291
|
+
/** Absolute deadline (ISO 8601). Wins over `deadlineHours` when both are sent. */
|
|
5292
|
+
deadlineAt: z11.string().datetime({ offset: true }).optional(),
|
|
5186
5293
|
addImpactedCards: z11.array(z11.string().min(1)).max(50).optional(),
|
|
5187
5294
|
removeImpactedCards: z11.array(z11.string().min(1)).max(50).optional(),
|
|
5188
5295
|
status: z11.enum(["Cancelled", "Open"]).optional(),
|
|
@@ -5867,23 +5974,18 @@ function registerDecisionReads(server2, conn2) {
|
|
|
5867
5974
|
}
|
|
5868
5975
|
function registerDecisionWrites(server2, conn2) {
|
|
5869
5976
|
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("; ")}` : "";
|
|
5977
|
+
const res = await conn2.createDecision(params);
|
|
5978
|
+
const { impactedLinked, refused, ...detail } = res;
|
|
5979
|
+
const refusedLine = refused.length > 0 ? `
|
|
5980
|
+
Not linked: ${refused.map((r) => `${r.ref} (${r.reason})`).join("; ")}` : "";
|
|
5881
5981
|
return {
|
|
5882
5982
|
content: [
|
|
5883
5983
|
{
|
|
5884
5984
|
type: "text",
|
|
5885
5985
|
text: `Raised decision ${res.slug} \u2014 ${res.url}
|
|
5886
|
-
Blocking ${
|
|
5986
|
+
Blocking ${impactedLinked.length} card(s).${refusedLine}
|
|
5987
|
+
|
|
5988
|
+
${JSON.stringify(detail, null, 2)}`
|
|
5887
5989
|
}
|
|
5888
5990
|
]
|
|
5889
5991
|
};
|
|
@@ -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