@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.
@@ -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 z4 } from "zod";
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 ? z4.strictObject(tool2.schema) : tool2.schema;
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 z5 } from "zod";
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: z5.number().optional().describe("Number of recent messages to fetch (default 20)"),
6953
- task_id: z5.string().optional().describe("Child task ID to read chat from. Omit to read the current task's chat.")
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: z5.string().describe("The task slug (e.g. 'my-task') or CUID")
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: z5.string().optional().describe("Task ID or slug. Omit to read logs from the current task."),
7021
- source: z5.enum(["agent", "application"]).optional().describe("Filter by log source. Omit for all logs."),
7022
- limit: z5.number().optional().describe("Max number of log entries to return (default 50, max 500).")
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: z5.string().describe("The file ID to retrieve") },
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 z6 } from "zod";
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: z6.string().optional().describe(
7243
+ status: z7.string().optional().describe(
7147
7244
  "Filter by status: Planning, Open, InProgress, ReviewPR, ReviewDev, ReviewLive, Complete, Cancelled"
7148
7245
  ),
7149
- limit: z6.number().int().min(1).max(100).optional().describe("Max results (default 20)")
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 z7 } from "zod";
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: z7.string().describe("The message to post to the team"),
7180
- task_id: z7.string().optional().describe("Child task ID to post to. Omit to post to the current task's chat.")
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: z7.enum(["InProgress", "ReviewPR", "ReviewDev", "Complete"]).describe("The new status for the task"),
7219
- task_id: z7.string().optional().describe("Child task ID to update. Omit to update the current task.")
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: z7.string().describe("The PR title"),
7251
- body: z7.string().describe("The PR description/body in markdown"),
7252
- branch: z7.string().optional().describe(
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: z7.string().optional().describe(
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: z7.string().optional().describe(
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: z7.boolean().optional().describe(
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: z7.string().describe("Slug or ID of the task this task depends on")
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: z7.string().describe("Slug or ID of the task to remove as dependency")
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: z7.string().describe("Follow-up task title"),
7388
- description: z7.string().optional().describe("Brief description of the follow-up work"),
7389
- plan: z7.string().optional().describe("Implementation plan if known"),
7390
- story_point_value: z7.number().optional().describe("Story point estimate (1=Common, 2=Magic, 3=Rare, 5=Unique)")
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: z7.string().describe("Short title for the suggestion"),
7418
- description: z7.string().optional().describe(
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: z7.array(z7.string()).optional().describe("Tag names to categorize the suggestion")
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: z7.string().describe("The suggestion ID to vote on"),
7451
- value: z7.number().refine((v) => v === 1 || v === -1, { message: "Value must be 1 or -1" }).describe("+1 to upvote, -1 to downvote")
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 z8 } from "zod";
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: z8.string().describe("Path to the image file \u2014 absolute, or relative to the workspace root"),
7498
- title: z8.string().optional().describe("Short caption posted with the image (defaults to the file name)")
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 z9 } from "zod";
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: z9.array(z9.string()).optional().describe('Filter tasks by card status, e.g. ["ReviewDev", "ReviewLive"]'),
7607
- testStatuses: z9.array(z9.enum(["open", "approved", "rejected"])).optional().describe("Filter tests by status: open | approved | rejected")
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: z9.array(z9.object({ title: z9.string().min(1).describe("A concise, actionable test step") })).min(1).describe("List of manual test steps to add")
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: z9.string().min(1).describe("The current title of the manual test to edit"),
7655
- newTitle: z9.string().min(1).describe("The new title for the manual test")
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: z9.string().min(1).describe("The title of the manual test to remove")
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: z9.string().min(1).describe("The title of the manual test to approve")
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: z9.string().min(1).describe("The title of the manual test to reject"),
7720
- reason: z9.string().min(1).max(2e3).describe("Why the test failed \u2014 what went wrong, shown to the team")
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 z10 } from "zod";
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: z10.string().optional().describe("The task plan in markdown"),
7767
- description: z10.string().optional().describe("Updated task 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: z10.string().describe("Subtask title"),
7789
- description: z10.string().optional().describe("Brief description"),
7790
- plan: z10.string().optional().describe("Implementation plan in markdown"),
7791
- ordinal: z10.number().optional().describe("Step/order number (0-based)"),
7792
- storyPointValue: z10.number().optional().describe(SP_DESCRIPTION),
7793
- followParentStatus: z10.boolean().optional().describe(FOLLOW_PARENT_STATUS_DESCRIPTION),
7794
- dependsOn: z10.array(z10.string()).optional().describe(DEPENDS_ON_DESCRIPTION)
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: z10.string().describe("The subtask ID to update"),
7831
- title: z10.string().optional(),
7832
- description: z10.string().optional(),
7833
- plan: z10.string().optional(),
7834
- status: z10.enum(["Planning", "Open"]).optional().describe(
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: z10.string().optional().describe(
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: z10.number().optional(),
7841
- storyPointValue: z10.number().optional().describe(SP_DESCRIPTION),
7842
- followParentStatus: z10.boolean().optional().describe(FOLLOW_PARENT_STATUS_DESCRIPTION),
7843
- dependsOn: z10.array(z10.string()).optional().describe(
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: z10.string().describe("The subtask ID to delete") },
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: z10.boolean().optional().describe(
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: z10.string().describe("The child task ID to start a cloud build for")
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: z10.string().describe("The child task ID whose build should be stopped")
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: z10.string().describe("The child task ID whose PR should be approved and merged")
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 z11 } from "zod";
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: z11.string().optional().describe("The new task title"),
8013
- storyPointValue: z11.number().optional().describe(SP_DESCRIPTION2),
8014
- tagNames: z11.array(z11.string()).optional().describe("Array of tag names to assign"),
8015
- githubPRUrl: z11.string().url().optional().describe("GitHub pull request URL to link to this task"),
8016
- githubBranch: z11.string().optional().describe("Set the GitHub branch name for this task (e.g. 'conveyor/my-feature-abc123')")
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 z12 } from "zod";
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: z12.string().describe("Brief summary of what was reviewed and why it looks good")
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: z12.array(
8095
- z12.object({
8096
- file: z12.string().describe("File path where the issue was found"),
8097
- line: z12.number().optional().describe("Line number (if applicable)"),
8098
- severity: z12.enum(["critical", "major", "minor"]).describe("Issue severity"),
8099
- description: z12.string().describe("What is wrong and how to fix it")
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: z12.string().describe("Brief overall summary of the review findings")
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-BN5TDTW7.js.map
11745
+ //# sourceMappingURL=chunk-KEKGEDN2.js.map