@rallycry/conveyor-agent 10.10.0 → 10.11.0
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/{chunk-BN5TDTW7.js → chunk-KEKGEDN2.js} +188 -89
- package/dist/chunk-KEKGEDN2.js.map +1 -0
- package/dist/cli.js +310 -12
- package/dist/cli.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-BN5TDTW7.js.map +0 -1
|
@@ -1901,6 +1901,7 @@ async function restoreOnBoot(bundle, cwd) {
|
|
|
1901
1901
|
import { z } from "zod";
|
|
1902
1902
|
import { z as z2 } from "zod";
|
|
1903
1903
|
import { z as z3 } from "zod";
|
|
1904
|
+
import { z as z4 } from "zod";
|
|
1904
1905
|
var DEFAULT_SONNET_MODEL = "claude-sonnet-5";
|
|
1905
1906
|
var FABLE_MODEL = "claude-fable-5";
|
|
1906
1907
|
var TUI_KINDS = ["claude-code", "opencode"];
|
|
@@ -2795,6 +2796,102 @@ var CreateProjectSuggestionRequestSchema = z3.object({
|
|
|
2795
2796
|
tagNames: z3.array(z3.string()).optional(),
|
|
2796
2797
|
requestingUserId: z3.string().optional()
|
|
2797
2798
|
});
|
|
2799
|
+
var ProjectTagContextPathSchema = z4.object({
|
|
2800
|
+
type: z4.enum(["rule", "doc", "file", "folder"]),
|
|
2801
|
+
path: z4.string().min(1).max(500),
|
|
2802
|
+
label: z4.string().max(100).optional()
|
|
2803
|
+
});
|
|
2804
|
+
var hexColor = z4.string().regex(/^#[0-9a-fA-F]{6}$/, "Expected #RRGGBB hex color");
|
|
2805
|
+
var CreateProjectTagRequestSchema = z4.object({
|
|
2806
|
+
projectId: z4.string(),
|
|
2807
|
+
name: z4.string().min(1).max(50),
|
|
2808
|
+
color: hexColor.optional(),
|
|
2809
|
+
description: z4.string().max(500).optional(),
|
|
2810
|
+
contextPaths: z4.array(ProjectTagContextPathSchema).max(20).optional(),
|
|
2811
|
+
requestingUserId: z4.string().optional()
|
|
2812
|
+
});
|
|
2813
|
+
var UpdateProjectTagRequestSchema = z4.object({
|
|
2814
|
+
projectId: z4.string(),
|
|
2815
|
+
tagId: z4.string(),
|
|
2816
|
+
name: z4.string().min(1).max(50).optional(),
|
|
2817
|
+
color: hexColor.optional(),
|
|
2818
|
+
description: z4.string().max(500).optional(),
|
|
2819
|
+
/** Full replacement of the tag's context links when provided. */
|
|
2820
|
+
contextPaths: z4.array(ProjectTagContextPathSchema).max(20).optional(),
|
|
2821
|
+
requestingUserId: z4.string().optional()
|
|
2822
|
+
});
|
|
2823
|
+
var PostToProjectChatRequestSchema = z4.object({
|
|
2824
|
+
projectId: z4.string(),
|
|
2825
|
+
content: z4.string().min(1).max(2e4),
|
|
2826
|
+
requestingUserId: z4.string().optional()
|
|
2827
|
+
});
|
|
2828
|
+
var StartTagAuditRequestSchema = z4.object({
|
|
2829
|
+
projectId: z4.string(),
|
|
2830
|
+
requestingUserId: z4.string().optional()
|
|
2831
|
+
});
|
|
2832
|
+
var StartTaskAuditRequestSchema = z4.object({
|
|
2833
|
+
projectId: z4.string(),
|
|
2834
|
+
taskIds: z4.array(z4.string()).min(1).max(20),
|
|
2835
|
+
requestingUserId: z4.string().optional()
|
|
2836
|
+
});
|
|
2837
|
+
var ReportTaskAuditResultRequestSchema = z4.object({
|
|
2838
|
+
projectId: z4.string(),
|
|
2839
|
+
taskId: z4.string(),
|
|
2840
|
+
summary: z4.string(),
|
|
2841
|
+
turnGrades: z4.array(
|
|
2842
|
+
z4.object({
|
|
2843
|
+
turnIndex: z4.number(),
|
|
2844
|
+
phase: z4.enum(["planning", "building", "human"]),
|
|
2845
|
+
grade: z4.enum(["correct", "neutral", "blunder"]),
|
|
2846
|
+
reasoning: z4.string(),
|
|
2847
|
+
eventType: z4.string(),
|
|
2848
|
+
eventSummary: z4.string()
|
|
2849
|
+
})
|
|
2850
|
+
),
|
|
2851
|
+
planningAccuracy: z4.number().nullable(),
|
|
2852
|
+
buildingAccuracy: z4.number().nullable(),
|
|
2853
|
+
humanAccuracy: z4.number().nullable(),
|
|
2854
|
+
planningCorrect: z4.number(),
|
|
2855
|
+
planningNeutral: z4.number(),
|
|
2856
|
+
planningBlunder: z4.number(),
|
|
2857
|
+
buildingCorrect: z4.number(),
|
|
2858
|
+
buildingNeutral: z4.number(),
|
|
2859
|
+
buildingBlunder: z4.number(),
|
|
2860
|
+
humanCorrect: z4.number(),
|
|
2861
|
+
humanNeutral: z4.number(),
|
|
2862
|
+
humanBlunder: z4.number(),
|
|
2863
|
+
humanEvaluations: z4.array(
|
|
2864
|
+
z4.object({
|
|
2865
|
+
messageIndex: z4.number(),
|
|
2866
|
+
rating: z4.union([z4.literal(-1), z4.literal(0), z4.literal(1)]),
|
|
2867
|
+
reasoning: z4.string()
|
|
2868
|
+
})
|
|
2869
|
+
).optional(),
|
|
2870
|
+
suggestionIds: z4.array(z4.string()),
|
|
2871
|
+
auditCostUsd: z4.number().nullable(),
|
|
2872
|
+
model: z4.string().nullable(),
|
|
2873
|
+
/** When set, the audit is marked failed with this message instead. */
|
|
2874
|
+
error: z4.string().optional()
|
|
2875
|
+
});
|
|
2876
|
+
var GetTaskAuditsRequestSchema = z4.object({
|
|
2877
|
+
projectId: z4.string(),
|
|
2878
|
+
limit: z4.number().int().positive().max(200).optional().default(50)
|
|
2879
|
+
});
|
|
2880
|
+
var GetTaskAuditRequestSchema = z4.object({
|
|
2881
|
+
projectId: z4.string(),
|
|
2882
|
+
auditId: z4.string()
|
|
2883
|
+
});
|
|
2884
|
+
var GetTaskAuditAggregatesRequestSchema = z4.object({
|
|
2885
|
+
projectId: z4.string()
|
|
2886
|
+
});
|
|
2887
|
+
var DeleteTaskAuditRequestSchema = z4.object({
|
|
2888
|
+
projectId: z4.string(),
|
|
2889
|
+
auditId: z4.string(),
|
|
2890
|
+
requestingUserId: z4.string().optional()
|
|
2891
|
+
});
|
|
2892
|
+
var MarkInitialPromptSubmittedRequestSchema = z4.object({
|
|
2893
|
+
sessionId: z4.string()
|
|
2894
|
+
});
|
|
2798
2895
|
var AGENT_STATUS_REASON_USER_QUESTION = "user_question";
|
|
2799
2896
|
var TASK_CHAT_HISTORY_LIMIT = 20;
|
|
2800
2897
|
var PM_CHAT_HISTORY_LIMIT = 40;
|
|
@@ -3922,7 +4019,7 @@ var PtyOutputCoalescer = class {
|
|
|
3922
4019
|
|
|
3923
4020
|
// src/harness/pty/tool-server.ts
|
|
3924
4021
|
import { createServer as createServer2 } from "http";
|
|
3925
|
-
import { z as
|
|
4022
|
+
import { z as z5 } from "zod";
|
|
3926
4023
|
import { writeFile as writeFile3 } from "fs/promises";
|
|
3927
4024
|
import { join as join2 } from "path";
|
|
3928
4025
|
import { randomBytes } from "crypto";
|
|
@@ -3979,7 +4076,7 @@ var PtyToolServer = class {
|
|
|
3979
4076
|
const mcp = new McpServer({ name: this.name, version: "1.0.0" });
|
|
3980
4077
|
const register = mcp.registerTool.bind(mcp);
|
|
3981
4078
|
for (const tool2 of this.tools) {
|
|
3982
|
-
const inputSchema = tool2.strict ?
|
|
4079
|
+
const inputSchema = tool2.strict ? z5.strictObject(tool2.schema) : tool2.schema;
|
|
3983
4080
|
register(
|
|
3984
4081
|
tool2.name,
|
|
3985
4082
|
{
|
|
@@ -6915,7 +7012,7 @@ async function buildInitialPrompt(mode, context, isAuto, agentMode) {
|
|
|
6915
7012
|
}
|
|
6916
7013
|
|
|
6917
7014
|
// src/tools/task-context-tools.ts
|
|
6918
|
-
import { z as
|
|
7015
|
+
import { z as z6 } from "zod";
|
|
6919
7016
|
|
|
6920
7017
|
// src/tools/helpers.ts
|
|
6921
7018
|
function textResult(text) {
|
|
@@ -6949,8 +7046,8 @@ function buildReadTaskChatTool(connection) {
|
|
|
6949
7046
|
"read_task_chat",
|
|
6950
7047
|
"Read recent human/user chat messages for a task. Omit task_id for the current task; pass a child ID for a child's chat. For agent logs use get_execution_logs.",
|
|
6951
7048
|
{
|
|
6952
|
-
limit:
|
|
6953
|
-
task_id:
|
|
7049
|
+
limit: z6.number().optional().describe("Number of recent messages to fetch (default 20)"),
|
|
7050
|
+
task_id: z6.string().optional().describe("Child task ID to read chat from. Omit to read the current task's chat.")
|
|
6954
7051
|
},
|
|
6955
7052
|
async ({ limit, task_id }) => {
|
|
6956
7053
|
try {
|
|
@@ -6994,7 +7091,7 @@ function buildGetTaskTool(connection) {
|
|
|
6994
7091
|
"get_task",
|
|
6995
7092
|
"Look up any task by slug or ID. Returns JSON with id, slug, title, description, plan, status, branch, githubPRNumber, githubPRUrl, storyPoints. For children use list_subtasks.",
|
|
6996
7093
|
{
|
|
6997
|
-
slug_or_id:
|
|
7094
|
+
slug_or_id: z6.string().describe("The task slug (e.g. 'my-task') or CUID")
|
|
6998
7095
|
},
|
|
6999
7096
|
async ({ slug_or_id }) => {
|
|
7000
7097
|
try {
|
|
@@ -7017,9 +7114,9 @@ function buildGetExecutionLogsTool(connection) {
|
|
|
7017
7114
|
"get_execution_logs",
|
|
7018
7115
|
"Read CLI execution logs \u2014 agent reasoning, tool calls, and setup/dev-server output. Filter via source='agent' or 'application'. For human chat use read_task_chat.",
|
|
7019
7116
|
{
|
|
7020
|
-
task_id:
|
|
7021
|
-
source:
|
|
7022
|
-
limit:
|
|
7117
|
+
task_id: z6.string().optional().describe("Task ID or slug. Omit to read logs from the current task."),
|
|
7118
|
+
source: z6.enum(["agent", "application"]).optional().describe("Filter by log source. Omit for all logs."),
|
|
7119
|
+
limit: z6.number().optional().describe("Max number of log entries to return (default 50, max 500).")
|
|
7023
7120
|
},
|
|
7024
7121
|
async ({ task_id, source, limit }) => {
|
|
7025
7122
|
try {
|
|
@@ -7079,7 +7176,7 @@ function buildGetAttachmentTool(connection) {
|
|
|
7079
7176
|
return defineTool(
|
|
7080
7177
|
"get_attachment",
|
|
7081
7178
|
"Fetch one task file's content plus metadata by file ID. Call list_task_files first to discover IDs and check sizes \u2014 large binaries may be truncated by the service's size limit.",
|
|
7082
|
-
{ fileId:
|
|
7179
|
+
{ fileId: z6.string().describe("The file ID to retrieve") },
|
|
7083
7180
|
async ({ fileId }) => {
|
|
7084
7181
|
try {
|
|
7085
7182
|
const file = await connection.call("getTaskFile", {
|
|
@@ -7117,7 +7214,7 @@ function buildTaskContextTools(connection) {
|
|
|
7117
7214
|
}
|
|
7118
7215
|
|
|
7119
7216
|
// src/tools/dependency-suggestion-tools.ts
|
|
7120
|
-
import { z as
|
|
7217
|
+
import { z as z7 } from "zod";
|
|
7121
7218
|
function buildGetDependenciesTool(connection) {
|
|
7122
7219
|
return defineTool(
|
|
7123
7220
|
"get_dependencies",
|
|
@@ -7143,10 +7240,10 @@ function buildGetSuggestionsTool(connection) {
|
|
|
7143
7240
|
"get_suggestions",
|
|
7144
7241
|
"List project suggestions sorted by vote score. Filter by status or cap with limit (default 20). Suggestions are project-level ideas, not tasks \u2014 use get_task for tasks.",
|
|
7145
7242
|
{
|
|
7146
|
-
status:
|
|
7243
|
+
status: z7.string().optional().describe(
|
|
7147
7244
|
"Filter by status: Planning, Open, InProgress, ReviewPR, ReviewDev, ReviewLive, Complete, Cancelled"
|
|
7148
7245
|
),
|
|
7149
|
-
limit:
|
|
7246
|
+
limit: z7.number().int().min(1).max(100).optional().describe("Max results (default 20)")
|
|
7150
7247
|
},
|
|
7151
7248
|
async ({ status, limit }) => {
|
|
7152
7249
|
try {
|
|
@@ -7170,14 +7267,14 @@ function buildGetSuggestionsTool(connection) {
|
|
|
7170
7267
|
}
|
|
7171
7268
|
|
|
7172
7269
|
// src/tools/mutation-tools.ts
|
|
7173
|
-
import { z as
|
|
7270
|
+
import { z as z8 } from "zod";
|
|
7174
7271
|
function buildPostToChatTool(connection) {
|
|
7175
7272
|
return defineTool(
|
|
7176
7273
|
"post_to_chat",
|
|
7177
7274
|
"Post a message to the task chat for the team to see. Your turn output is NOT shown in chat, so this is the only way the team sees your status, summaries, and questions. Omit task_id to post to the current task's chat; pass a child's ID to message its chat.",
|
|
7178
7275
|
{
|
|
7179
|
-
message:
|
|
7180
|
-
task_id:
|
|
7276
|
+
message: z8.string().describe("The message to post to the team"),
|
|
7277
|
+
task_id: z8.string().optional().describe("Child task ID to post to. Omit to post to the current task's chat.")
|
|
7181
7278
|
},
|
|
7182
7279
|
async ({ message, task_id }) => {
|
|
7183
7280
|
try {
|
|
@@ -7215,8 +7312,8 @@ function buildForceUpdateTaskStatusTool(connection) {
|
|
|
7215
7312
|
"force_update_task_status",
|
|
7216
7313
|
"EMERGENCY ONLY: force-override a task's Kanban status. Use when an automatic transition failed and the task is wedged. Normal flow transitions status automatically.",
|
|
7217
7314
|
{
|
|
7218
|
-
status:
|
|
7219
|
-
task_id:
|
|
7315
|
+
status: z8.enum(["InProgress", "ReviewPR", "ReviewDev", "Complete"]).describe("The new status for the task"),
|
|
7316
|
+
task_id: z8.string().optional().describe("Child task ID to update. Omit to update the current task.")
|
|
7220
7317
|
},
|
|
7221
7318
|
async ({ status, task_id }) => {
|
|
7222
7319
|
try {
|
|
@@ -7247,18 +7344,18 @@ function buildCreatePullRequestTool(connection, config) {
|
|
|
7247
7344
|
"create_pull_request",
|
|
7248
7345
|
"Create a GitHub PR for this task. Auto-stages, commits (commitMessage or title default), pushes to origin, then opens the PR. Always use this instead of gh CLI or raw git.",
|
|
7249
7346
|
{
|
|
7250
|
-
title:
|
|
7251
|
-
body:
|
|
7252
|
-
branch:
|
|
7347
|
+
title: z8.string().describe("The PR title"),
|
|
7348
|
+
body: z8.string().describe("The PR description/body in markdown"),
|
|
7349
|
+
branch: z8.string().optional().describe(
|
|
7253
7350
|
"The head branch name for the PR. If the task doesn't have a branch set, this will be used. Defaults to the task's existing branch."
|
|
7254
7351
|
),
|
|
7255
|
-
baseBranch:
|
|
7352
|
+
baseBranch: z8.string().optional().describe(
|
|
7256
7353
|
"The base branch to target for the PR (e.g. 'main', 'develop'). Defaults to the project's configured dev branch."
|
|
7257
7354
|
),
|
|
7258
|
-
commitMessage:
|
|
7355
|
+
commitMessage: z8.string().optional().describe(
|
|
7259
7356
|
"Commit message for staging uncommitted changes. If not provided, a default message based on the PR title will be used."
|
|
7260
7357
|
),
|
|
7261
|
-
skipVerify:
|
|
7358
|
+
skipVerify: z8.boolean().optional().describe(
|
|
7262
7359
|
"Controls the local pre-push quality gate (lint/typecheck/test). Defaults to true (--no-verify): the push skips the local gate because you should run gates yourself before opening the PR and CI re-runs them on the resulting PR. Running the full gate synchronously during the push would block the agent's event loop long enough to drop the Conveyor socket connection. Pass false to force the local pre-push hook to run."
|
|
7263
7360
|
)
|
|
7264
7361
|
},
|
|
@@ -7340,7 +7437,7 @@ function buildAddDependencyTool(connection) {
|
|
|
7340
7437
|
"add_dependency",
|
|
7341
7438
|
"Add a blocking dependency \u2014 this task cannot start until the named task is merged to dev. For post-task follow-ups use create_follow_up_task instead.",
|
|
7342
7439
|
{
|
|
7343
|
-
depends_on_slug_or_id:
|
|
7440
|
+
depends_on_slug_or_id: z8.string().describe("Slug or ID of the task this task depends on")
|
|
7344
7441
|
},
|
|
7345
7442
|
async ({ depends_on_slug_or_id }) => {
|
|
7346
7443
|
try {
|
|
@@ -7362,7 +7459,7 @@ function buildRemoveDependencyTool(connection) {
|
|
|
7362
7459
|
"remove_dependency",
|
|
7363
7460
|
"Remove a previously added dependency from this task. When to use: the dependency was added in error or is no longer relevant. Returns: confirmation string.",
|
|
7364
7461
|
{
|
|
7365
|
-
depends_on_slug_or_id:
|
|
7462
|
+
depends_on_slug_or_id: z8.string().describe("Slug or ID of the task to remove as dependency")
|
|
7366
7463
|
},
|
|
7367
7464
|
async ({ depends_on_slug_or_id }) => {
|
|
7368
7465
|
try {
|
|
@@ -7384,10 +7481,10 @@ function buildCreateFollowUpTaskTool(connection) {
|
|
|
7384
7481
|
"create_follow_up_task",
|
|
7385
7482
|
"Create a follow-up task that depends on the current task. Use for out-of-scope work or cleanup that should land after this task merges. For blockers use add_dependency.",
|
|
7386
7483
|
{
|
|
7387
|
-
title:
|
|
7388
|
-
description:
|
|
7389
|
-
plan:
|
|
7390
|
-
story_point_value:
|
|
7484
|
+
title: z8.string().describe("Follow-up task title"),
|
|
7485
|
+
description: z8.string().optional().describe("Brief description of the follow-up work"),
|
|
7486
|
+
plan: z8.string().optional().describe("Implementation plan if known"),
|
|
7487
|
+
story_point_value: z8.number().optional().describe("Story point estimate (1=Common, 2=Magic, 3=Rare, 5=Unique)")
|
|
7391
7488
|
},
|
|
7392
7489
|
async ({ title, description, plan, story_point_value }) => {
|
|
7393
7490
|
try {
|
|
@@ -7414,11 +7511,11 @@ function buildCreateSuggestionTool(connection) {
|
|
|
7414
7511
|
"create_suggestion",
|
|
7415
7512
|
"Suggest a feature, improvement, rule, or idea for the project. Duplicates are deduped and your upvote is recorded. For actionable work on this task open a follow-up task.",
|
|
7416
7513
|
{
|
|
7417
|
-
title:
|
|
7418
|
-
description:
|
|
7514
|
+
title: z8.string().describe("Short title for the suggestion"),
|
|
7515
|
+
description: z8.string().optional().describe(
|
|
7419
7516
|
"1-2 sentence description of what should change and why. Keep concise and project-focused."
|
|
7420
7517
|
),
|
|
7421
|
-
tag_names:
|
|
7518
|
+
tag_names: z8.array(z8.string()).optional().describe("Tag names to categorize the suggestion")
|
|
7422
7519
|
},
|
|
7423
7520
|
async ({ title, description, tag_names }) => {
|
|
7424
7521
|
try {
|
|
@@ -7447,8 +7544,8 @@ function buildVoteSuggestionTool(connection) {
|
|
|
7447
7544
|
"vote_suggestion",
|
|
7448
7545
|
"Vote +1 or -1 on a project suggestion. Use to express support or disagreement with a specific suggestion returned by get_suggestions.",
|
|
7449
7546
|
{
|
|
7450
|
-
suggestion_id:
|
|
7451
|
-
value:
|
|
7547
|
+
suggestion_id: z8.string().describe("The suggestion ID to vote on"),
|
|
7548
|
+
value: z8.number().refine((v) => v === 1 || v === -1, { message: "Value must be 1 or -1" }).describe("+1 to upvote, -1 to downvote")
|
|
7452
7549
|
},
|
|
7453
7550
|
async ({ suggestion_id, value }) => {
|
|
7454
7551
|
try {
|
|
@@ -7481,7 +7578,7 @@ function buildMutationTools(connection, config) {
|
|
|
7481
7578
|
// src/tools/attachment-tools.ts
|
|
7482
7579
|
import { readFile as readFile3, stat as stat4 } from "fs/promises";
|
|
7483
7580
|
import { basename, extname, isAbsolute, join as join5 } from "path";
|
|
7484
|
-
import { z as
|
|
7581
|
+
import { z as z9 } from "zod";
|
|
7485
7582
|
var IMAGE_MIME_BY_EXT = {
|
|
7486
7583
|
".png": "image/png",
|
|
7487
7584
|
".jpg": "image/jpeg",
|
|
@@ -7494,8 +7591,8 @@ function buildUploadAttachmentTool(connection, config) {
|
|
|
7494
7591
|
"upload_attachment",
|
|
7495
7592
|
"Upload an image file (e.g. a Playwright screenshot) as a task attachment AND post it to the task chat in one step \u2014 no follow-up post_to_chat call needed. Supports png/jpg/gif/webp.",
|
|
7496
7593
|
{
|
|
7497
|
-
path:
|
|
7498
|
-
title:
|
|
7594
|
+
path: z9.string().describe("Path to the image file \u2014 absolute, or relative to the workspace root"),
|
|
7595
|
+
title: z9.string().optional().describe("Short caption posted with the image (defaults to the file name)")
|
|
7499
7596
|
},
|
|
7500
7597
|
async ({ path: path4, title }) => {
|
|
7501
7598
|
try {
|
|
@@ -7551,7 +7648,7 @@ function buildUploadAttachmentTool(connection, config) {
|
|
|
7551
7648
|
}
|
|
7552
7649
|
|
|
7553
7650
|
// src/tools/checklist-tools.ts
|
|
7554
|
-
import { z as
|
|
7651
|
+
import { z as z10 } from "zod";
|
|
7555
7652
|
function buildListManualTestsTool(connection) {
|
|
7556
7653
|
return defineTool(
|
|
7557
7654
|
"list_manual_tests",
|
|
@@ -7603,8 +7700,8 @@ function buildQueryManualTestsTool(connection) {
|
|
|
7603
7700
|
"query_manual_tests",
|
|
7604
7701
|
"Query manual tests across many tasks in this project, grouped by task. Filter by card status (ReviewDev, ReviewLive, Complete, ...) and/or test status (open | approved | rejected). Use to answer 'show all OPEN manual tests in ReviewDev' or 'show all REJECTED manual tests with the failing reason'. With no filters it defaults to the needs-attention view: open+rejected tests on ReviewDev/ReviewLive cards.",
|
|
7605
7702
|
{
|
|
7606
|
-
cardStatuses:
|
|
7607
|
-
testStatuses:
|
|
7703
|
+
cardStatuses: z10.array(z10.string()).optional().describe('Filter tasks by card status, e.g. ["ReviewDev", "ReviewLive"]'),
|
|
7704
|
+
testStatuses: z10.array(z10.enum(["open", "approved", "rejected"])).optional().describe("Filter tests by status: open | approved | rejected")
|
|
7608
7705
|
},
|
|
7609
7706
|
async ({ cardStatuses, testStatuses }) => {
|
|
7610
7707
|
try {
|
|
@@ -7628,7 +7725,7 @@ function buildSetManualTestsTool(connection) {
|
|
|
7628
7725
|
"set_manual_tests",
|
|
7629
7726
|
"Add manual test steps to the task checklist. Existing items with the same title are automatically skipped (deduplication). Use to record specific manual verification steps that reviewers should follow when testing this PR.",
|
|
7630
7727
|
{
|
|
7631
|
-
items:
|
|
7728
|
+
items: z10.array(z10.object({ title: z10.string().min(1).describe("A concise, actionable test step") })).min(1).describe("List of manual test steps to add")
|
|
7632
7729
|
},
|
|
7633
7730
|
async ({ items }) => {
|
|
7634
7731
|
try {
|
|
@@ -7651,8 +7748,8 @@ function buildEditManualTestTool(connection) {
|
|
|
7651
7748
|
"edit_manual_test",
|
|
7652
7749
|
"Rename an existing manual test step. Identify the test by its current title (case-insensitive); pass the new title to replace it. Use to correct or refine a recorded manual verification step.",
|
|
7653
7750
|
{
|
|
7654
|
-
title:
|
|
7655
|
-
newTitle:
|
|
7751
|
+
title: z10.string().min(1).describe("The current title of the manual test to edit"),
|
|
7752
|
+
newTitle: z10.string().min(1).describe("The new title for the manual test")
|
|
7656
7753
|
},
|
|
7657
7754
|
async ({ title, newTitle }) => {
|
|
7658
7755
|
try {
|
|
@@ -7674,7 +7771,7 @@ function buildRemoveManualTestTool(connection) {
|
|
|
7674
7771
|
"remove_manual_test",
|
|
7675
7772
|
"Remove an existing manual test step from the task checklist. Identify the test by its title (case-insensitive). Use to delete a stale or incorrect manual verification step.",
|
|
7676
7773
|
{
|
|
7677
|
-
title:
|
|
7774
|
+
title: z10.string().min(1).describe("The title of the manual test to remove")
|
|
7678
7775
|
},
|
|
7679
7776
|
async ({ title }) => {
|
|
7680
7777
|
try {
|
|
@@ -7695,7 +7792,7 @@ function buildApproveManualTestTool(connection) {
|
|
|
7695
7792
|
"approve_manual_test",
|
|
7696
7793
|
"Sign off on (approve) a manual test step on behalf of your authenticated user. Identify the test by its title (case-insensitive). Use after you have verified the step passes.",
|
|
7697
7794
|
{
|
|
7698
|
-
title:
|
|
7795
|
+
title: z10.string().min(1).describe("The title of the manual test to approve")
|
|
7699
7796
|
},
|
|
7700
7797
|
async ({ title }) => {
|
|
7701
7798
|
try {
|
|
@@ -7716,8 +7813,8 @@ function buildRejectManualTestTool(connection) {
|
|
|
7716
7813
|
"reject_manual_test",
|
|
7717
7814
|
"Flag an issue with (reject) a manual test step on behalf of your authenticated user, recording the reason. Identify the test by its title (case-insensitive). Use when the step fails verification.",
|
|
7718
7815
|
{
|
|
7719
|
-
title:
|
|
7720
|
-
reason:
|
|
7816
|
+
title: z10.string().min(1).describe("The title of the manual test to reject"),
|
|
7817
|
+
reason: z10.string().min(1).max(2e3).describe("Why the test failed \u2014 what went wrong, shown to the team")
|
|
7721
7818
|
},
|
|
7722
7819
|
async ({ title, reason }) => {
|
|
7723
7820
|
try {
|
|
@@ -7754,7 +7851,7 @@ function buildCommonTools(connection, config) {
|
|
|
7754
7851
|
}
|
|
7755
7852
|
|
|
7756
7853
|
// src/tools/pm-tools.ts
|
|
7757
|
-
import { z as
|
|
7854
|
+
import { z as z11 } from "zod";
|
|
7758
7855
|
var SP_DESCRIPTION = "Story point value (1=Common, 2=Magic, 3=Rare, 5=Unique)";
|
|
7759
7856
|
var FOLLOW_PARENT_STATUS_DESCRIPTION = "Child mirrors the parent task's status automatically \u2014 for subtasks that ship on the parent's branch/PR with no build or PR of their own. Manual status writes on a follower stick only until the parent's next transition.";
|
|
7760
7857
|
var DEPENDS_ON_DESCRIPTION = "Sibling subtask ids or slugs this subtask blocks on (it won't start until they merge to dev). Set explicit dependency metadata here instead of describing order in the plan text \u2014 the pack runner schedules children off these edges. Omit / leave empty for independent children so they run in parallel.";
|
|
@@ -7763,8 +7860,8 @@ function buildUpdateTaskTool(connection) {
|
|
|
7763
7860
|
"update_task_plan",
|
|
7764
7861
|
"Save the plan and/or description to the current task. In auto/building mode, save the plan BEFORE writing code and keep it current as the approach evolves \u2014 post it, then build; never pause the build waiting for approval. For children use update_subtask; for title/tags/PR use update_task_properties.",
|
|
7765
7862
|
{
|
|
7766
|
-
plan:
|
|
7767
|
-
description:
|
|
7863
|
+
plan: z11.string().optional().describe("The task plan in markdown"),
|
|
7864
|
+
description: z11.string().optional().describe("Updated task description")
|
|
7768
7865
|
},
|
|
7769
7866
|
async ({ plan, description }) => {
|
|
7770
7867
|
try {
|
|
@@ -7785,13 +7882,13 @@ function buildCreateSubtaskTool(connection) {
|
|
|
7785
7882
|
"create_subtask",
|
|
7786
7883
|
"Create a subtask under the current parent task. Use when breaking a complex parent into smaller pieces during planning. For post-task follow-ups use create_follow_up_task.",
|
|
7787
7884
|
{
|
|
7788
|
-
title:
|
|
7789
|
-
description:
|
|
7790
|
-
plan:
|
|
7791
|
-
ordinal:
|
|
7792
|
-
storyPointValue:
|
|
7793
|
-
followParentStatus:
|
|
7794
|
-
dependsOn:
|
|
7885
|
+
title: z11.string().describe("Subtask title"),
|
|
7886
|
+
description: z11.string().optional().describe("Brief description"),
|
|
7887
|
+
plan: z11.string().optional().describe("Implementation plan in markdown"),
|
|
7888
|
+
ordinal: z11.number().optional().describe("Step/order number (0-based)"),
|
|
7889
|
+
storyPointValue: z11.number().optional().describe(SP_DESCRIPTION),
|
|
7890
|
+
followParentStatus: z11.boolean().optional().describe(FOLLOW_PARENT_STATUS_DESCRIPTION),
|
|
7891
|
+
dependsOn: z11.array(z11.string()).optional().describe(DEPENDS_ON_DESCRIPTION)
|
|
7795
7892
|
},
|
|
7796
7893
|
async ({
|
|
7797
7894
|
title,
|
|
@@ -7827,20 +7924,20 @@ function buildUpdateSubtaskTool(connection) {
|
|
|
7827
7924
|
"update_subtask",
|
|
7828
7925
|
"Update an existing subtask's fields (title, description, plan, ordinal, storyPointValue, dependsOn) \u2014 and the sanctioned path to make a child buildable: promote it to status Open, assign its agent (agentIdOrName), and set story points. Setting story points does NOT auto-promote; set status explicitly. For the current task use update_task_plan.",
|
|
7829
7926
|
{
|
|
7830
|
-
subtaskId:
|
|
7831
|
-
title:
|
|
7832
|
-
description:
|
|
7833
|
-
plan:
|
|
7834
|
-
status:
|
|
7927
|
+
subtaskId: z11.string().describe("The subtask ID to update"),
|
|
7928
|
+
title: z11.string().optional(),
|
|
7929
|
+
description: z11.string().optional(),
|
|
7930
|
+
plan: z11.string().optional(),
|
|
7931
|
+
status: z11.enum(["Planning", "Open"]).optional().describe(
|
|
7835
7932
|
'Move the child between "Planning" and "Open". "Open" marks it ready to execute \u2014 required before start_child_cloud_build. Execution statuses transition automatically.'
|
|
7836
7933
|
),
|
|
7837
|
-
agentIdOrName:
|
|
7934
|
+
agentIdOrName: z11.string().optional().describe(
|
|
7838
7935
|
"Assign a project agent to the child (agent id or exact name from the Project Agents list). Required before start_child_cloud_build."
|
|
7839
7936
|
),
|
|
7840
|
-
ordinal:
|
|
7841
|
-
storyPointValue:
|
|
7842
|
-
followParentStatus:
|
|
7843
|
-
dependsOn:
|
|
7937
|
+
ordinal: z11.number().optional(),
|
|
7938
|
+
storyPointValue: z11.number().optional().describe(SP_DESCRIPTION),
|
|
7939
|
+
followParentStatus: z11.boolean().optional().describe(FOLLOW_PARENT_STATUS_DESCRIPTION),
|
|
7940
|
+
dependsOn: z11.array(z11.string()).optional().describe(
|
|
7844
7941
|
`${DEPENDS_ON_DESCRIPTION} Replaces the full dependency set \u2014 pass [] to clear all, omit to leave unchanged.`
|
|
7845
7942
|
)
|
|
7846
7943
|
},
|
|
@@ -7879,7 +7976,7 @@ function buildDeleteSubtaskTool(connection) {
|
|
|
7879
7976
|
return defineTool(
|
|
7880
7977
|
"delete_subtask",
|
|
7881
7978
|
"Delete a subtask by id. When to use: a subtask was created in error or is no longer needed. Returns: confirmation string.",
|
|
7882
|
-
{ subtaskId:
|
|
7979
|
+
{ subtaskId: z11.string().describe("The subtask ID to delete") },
|
|
7883
7980
|
async ({ subtaskId }) => {
|
|
7884
7981
|
try {
|
|
7885
7982
|
await connection.call("deleteSubtask", {
|
|
@@ -7898,7 +7995,7 @@ function buildListSubtasksTool(connection) {
|
|
|
7898
7995
|
"list_subtasks",
|
|
7899
7996
|
"List all subtasks under the current parent task. Default compact view returns per child: status, agent, story points, PR number/state, dependencies, and holdsBuildSlot \u2014 plus packSlots (in-flight environments vs the PACK_CHILD_LIMIT cap, and which children hold the slots). Use to coordinate child work; pass verbose:true only when you need full description/plan text (large). For non-child tasks use get_task.",
|
|
7900
7997
|
{
|
|
7901
|
-
verbose:
|
|
7998
|
+
verbose: z11.boolean().optional().describe(
|
|
7902
7999
|
"Return full task rows including description and plan text (large \u2014 can exceed tool result limits on big packs). Default: compact orchestration view."
|
|
7903
8000
|
)
|
|
7904
8001
|
},
|
|
@@ -7922,7 +8019,7 @@ function buildPackTools(connection) {
|
|
|
7922
8019
|
"start_child_cloud_build",
|
|
7923
8020
|
"Start a cloud build (codespace) for a child task. Preconditions: child status is `Open`, story points set, and an agent assigned \u2014 satisfy all three with update_subtask (status/agentIdOrName/storyPointValue) first; none happen automatically. A PACK_CHILD_LIMIT error is backpressure, not failure: check list_subtasks packSlots for which children hold the in-flight slots, merge/stop one, then retry.",
|
|
7924
8021
|
{
|
|
7925
|
-
childTaskId:
|
|
8022
|
+
childTaskId: z11.string().describe("The child task ID to start a cloud build for")
|
|
7926
8023
|
},
|
|
7927
8024
|
async ({ childTaskId }) => {
|
|
7928
8025
|
try {
|
|
@@ -7942,7 +8039,7 @@ function buildPackTools(connection) {
|
|
|
7942
8039
|
"stop_child_build",
|
|
7943
8040
|
"Send a graceful stop signal to a running child build's agent. Not a force-kill \u2014 the agent may take a moment to wind down. Stopping a child eventually frees its PACK_CHILD_LIMIT build slot (see list_subtasks packSlots).",
|
|
7944
8041
|
{
|
|
7945
|
-
childTaskId:
|
|
8042
|
+
childTaskId: z11.string().describe("The child task ID whose build should be stopped")
|
|
7946
8043
|
},
|
|
7947
8044
|
async ({ childTaskId }) => {
|
|
7948
8045
|
try {
|
|
@@ -7962,7 +8059,7 @@ function buildPackTools(connection) {
|
|
|
7962
8059
|
"approve_and_merge_pr",
|
|
7963
8060
|
"Approve and merge a child task's PR. Preconditions: child in ReviewPR. Returns { merged }: true = merged (status\u2192ReviewDev); false = automerge queued, wait for ReviewDev.",
|
|
7964
8061
|
{
|
|
7965
|
-
childTaskId:
|
|
8062
|
+
childTaskId: z11.string().describe("The child task ID whose PR should be approved and merged")
|
|
7966
8063
|
},
|
|
7967
8064
|
async ({ childTaskId }) => {
|
|
7968
8065
|
try {
|
|
@@ -8000,7 +8097,7 @@ function buildPmTools(connection, options) {
|
|
|
8000
8097
|
}
|
|
8001
8098
|
|
|
8002
8099
|
// src/tools/discovery-tools.ts
|
|
8003
|
-
import { z as
|
|
8100
|
+
import { z as z12 } from "zod";
|
|
8004
8101
|
var SP_DESCRIPTION2 = "Story point value (1=Common, 2=Magic, 3=Rare, 5=Unique). The key is 'storyPointValue' \u2014 not 'storyPoints'.";
|
|
8005
8102
|
var VALID_PROPERTY_KEYS = "title, storyPointValue, tagNames, githubPRUrl, githubBranch";
|
|
8006
8103
|
function buildDiscoveryTools(connection) {
|
|
@@ -8009,11 +8106,11 @@ function buildDiscoveryTools(connection) {
|
|
|
8009
8106
|
"update_task_properties",
|
|
8010
8107
|
"Set one or more task properties in a single call. Valid keys: title, storyPointValue, tagNames, githubPRUrl, githubBranch. All are optional \u2014 include only the ones you want to update (at least one). Unknown keys are rejected.",
|
|
8011
8108
|
{
|
|
8012
|
-
title:
|
|
8013
|
-
storyPointValue:
|
|
8014
|
-
tagNames:
|
|
8015
|
-
githubPRUrl:
|
|
8016
|
-
githubBranch:
|
|
8109
|
+
title: z12.string().optional().describe("The new task title"),
|
|
8110
|
+
storyPointValue: z12.number().optional().describe(SP_DESCRIPTION2),
|
|
8111
|
+
tagNames: z12.array(z12.string()).optional().describe("Array of tag names to assign"),
|
|
8112
|
+
githubPRUrl: z12.string().url().optional().describe("GitHub pull request URL to link to this task"),
|
|
8113
|
+
githubBranch: z12.string().optional().describe("Set the GitHub branch name for this task (e.g. 'conveyor/my-feature-abc123')")
|
|
8017
8114
|
},
|
|
8018
8115
|
async ({ title, storyPointValue, tagNames, githubPRUrl, githubBranch }) => {
|
|
8019
8116
|
try {
|
|
@@ -8054,7 +8151,7 @@ function buildDiscoveryTools(connection) {
|
|
|
8054
8151
|
}
|
|
8055
8152
|
|
|
8056
8153
|
// src/tools/code-review-tools.ts
|
|
8057
|
-
import { z as
|
|
8154
|
+
import { z as z13 } from "zod";
|
|
8058
8155
|
async function endReviewSession(connection, reason) {
|
|
8059
8156
|
await connection.call("endReviewSession", {
|
|
8060
8157
|
sessionId: connection.sessionId,
|
|
@@ -8067,7 +8164,7 @@ function buildCodeReviewTools(connection) {
|
|
|
8067
8164
|
"approve_code_review",
|
|
8068
8165
|
"Approve the code review and exit. Use when the diff passes all review criteria. Takes only a summary \u2014 for changes, use request_code_changes with a structured issues[] list.",
|
|
8069
8166
|
{
|
|
8070
|
-
summary:
|
|
8167
|
+
summary: z13.string().describe("Brief summary of what was reviewed and why it looks good")
|
|
8071
8168
|
},
|
|
8072
8169
|
async ({ summary }) => {
|
|
8073
8170
|
const content = `**Code Review: Approved** :white_check_mark:
|
|
@@ -8091,15 +8188,15 @@ ${summary}`;
|
|
|
8091
8188
|
"request_code_changes",
|
|
8092
8189
|
"Request changes during code review and exit. Use when substantive issues must be fixed before merge. Each issue: { file, line?, severity: critical|major|minor, description }.",
|
|
8093
8190
|
{
|
|
8094
|
-
issues:
|
|
8095
|
-
|
|
8096
|
-
file:
|
|
8097
|
-
line:
|
|
8098
|
-
severity:
|
|
8099
|
-
description:
|
|
8191
|
+
issues: z13.array(
|
|
8192
|
+
z13.object({
|
|
8193
|
+
file: z13.string().describe("File path where the issue was found"),
|
|
8194
|
+
line: z13.number().optional().describe("Line number (if applicable)"),
|
|
8195
|
+
severity: z13.enum(["critical", "major", "minor"]).describe("Issue severity"),
|
|
8196
|
+
description: z13.string().describe("What is wrong and how to fix it")
|
|
8100
8197
|
})
|
|
8101
8198
|
).describe("List of issues found during review"),
|
|
8102
|
-
summary:
|
|
8199
|
+
summary: z13.string().describe("Brief overall summary of the review findings")
|
|
8103
8200
|
},
|
|
8104
8201
|
async ({ issues, summary }) => {
|
|
8105
8202
|
const issueLines = issues.map((issue) => {
|
|
@@ -11605,6 +11702,7 @@ export {
|
|
|
11605
11702
|
TUI_KINDS,
|
|
11606
11703
|
DEFAULT_LIFECYCLE_CONFIG,
|
|
11607
11704
|
Lifecycle,
|
|
11705
|
+
defineTool,
|
|
11608
11706
|
cleanTerminalOutput,
|
|
11609
11707
|
loadPtySpawn,
|
|
11610
11708
|
inheritedEnv,
|
|
@@ -11612,6 +11710,7 @@ export {
|
|
|
11612
11710
|
ClaudeTuiAdapter,
|
|
11613
11711
|
PtyHarness,
|
|
11614
11712
|
createServiceLogger,
|
|
11713
|
+
textResult,
|
|
11615
11714
|
GIT_TIMEOUT_MS,
|
|
11616
11715
|
hasUncommittedChanges,
|
|
11617
11716
|
getCurrentBranch,
|
|
@@ -11643,4 +11742,4 @@ export {
|
|
|
11643
11742
|
runStartCommand,
|
|
11644
11743
|
unshallowRepo
|
|
11645
11744
|
};
|
|
11646
|
-
//# sourceMappingURL=chunk-
|
|
11745
|
+
//# sourceMappingURL=chunk-KEKGEDN2.js.map
|