@rallycry/conveyor-agent 10.9.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.
@@ -2,6 +2,13 @@ import {
2
2
  LoopLagMonitor
3
3
  } from "./chunk-7TQO4ZF4.js";
4
4
 
5
+ // src/utils/sleep.ts
6
+ function sleep(ms) {
7
+ return new Promise((resolve) => {
8
+ setTimeout(resolve, ms);
9
+ });
10
+ }
11
+
5
12
  // src/setup/bootstrap.ts
6
13
  var BOOTSTRAP_TIMEOUT_MS = 3e4;
7
14
  var RETRY_DELAYS_MS = [5e3, 1e4, 2e4];
@@ -37,11 +44,6 @@ async function singleBootstrapAttempt(apiUrl, instanceName, bootstrapToken, time
37
44
  clearTimeout(timer);
38
45
  }
39
46
  }
40
- async function sleep(ms) {
41
- await new Promise((resolve) => {
42
- setTimeout(resolve, ms);
43
- });
44
- }
45
47
  function buildFailure(reason, attempts, status, detail) {
46
48
  const out = { ok: false, reason, attempts };
47
49
  if (status === void 0) {
@@ -133,11 +135,6 @@ var PollUntilBoundHttpError = class extends Error {
133
135
  }
134
136
  status;
135
137
  };
136
- async function sleep2(ms) {
137
- await new Promise((resolve) => {
138
- setTimeout(resolve, ms);
139
- });
140
- }
141
138
  async function pollUntilBound(opts) {
142
139
  const pollIntervalMs = opts.pollIntervalMs ?? 2e3;
143
140
  const maxWaitMs = opts.maxWaitMs ?? 30 * 60 * 1e3;
@@ -153,7 +150,7 @@ async function pollUntilBound(opts) {
153
150
  if (Date.now() >= deadline) {
154
151
  throw new Error(`pollUntilBound timed out after ${maxWaitMs}ms waiting for pod bind`);
155
152
  }
156
- await sleep2(pollIntervalMs);
153
+ await sleep(pollIntervalMs);
157
154
  continue;
158
155
  }
159
156
  throw new PollUntilBoundHttpError(response.status);
@@ -1903,6 +1900,8 @@ async function restoreOnBoot(bundle, cwd) {
1903
1900
  // ../shared/dist/index.js
1904
1901
  import { z } from "zod";
1905
1902
  import { z as z2 } from "zod";
1903
+ import { z as z3 } from "zod";
1904
+ import { z as z4 } from "zod";
1906
1905
  var DEFAULT_SONNET_MODEL = "claude-sonnet-5";
1907
1906
  var FABLE_MODEL = "claude-fable-5";
1908
1907
  var TUI_KINDS = ["claude-code", "opencode"];
@@ -1910,784 +1909,988 @@ var MAX_FILE_SIZE_BYTES = 25 * 1024 * 1024;
1910
1909
  var EMBED_THRESHOLD_IMAGES = 5 * 1024 * 1024;
1911
1910
  var EMBED_THRESHOLD_TEXT = 2 * 1024 * 1024;
1912
1911
  var IDLE_HEARTBEAT_MS = 90 * 1e3;
1913
- var AgentHeartbeatSchema = z.object({
1914
- sessionId: z.string().optional(),
1915
- timestamp: z.string(),
1916
- status: z.enum(["active", "idle", "building"]),
1917
- currentAction: z.string().optional(),
1912
+ var TurnEndToolCallSchema = z.object({
1913
+ tool: z.string(),
1914
+ input: z.string().optional(),
1915
+ output: z.string().optional(),
1916
+ timestamp: z.string().optional()
1917
+ }).passthrough();
1918
+ var KnownAgentEventSchema = z.discriminatedUnion("type", [
1919
+ // ── Lifecycle / connection ────────────────────────────────────────────
1920
+ z.object({
1921
+ type: z.literal("connected"),
1922
+ sessionId: z.string(),
1923
+ projectId: z.string().optional()
1924
+ }).passthrough(),
1925
+ // Open-ended context snapshot spread from buildInitializationContext().
1926
+ z.object({ type: z.literal("session_manifest") }).passthrough(),
1927
+ z.object({
1928
+ type: z.literal("agent_runner_status"),
1929
+ reason: z.string(),
1930
+ attempt: z.number().optional(),
1931
+ attempts: z.number().optional()
1932
+ }).passthrough(),
1933
+ z.object({ type: z.literal("shutdown"), reason: z.string().optional() }).passthrough(),
1934
+ z.object({ type: z.literal("mode_changed"), agentMode: z.string() }).passthrough(),
1935
+ z.object({ type: z.literal("mode_transition"), from: z.string(), to: z.string() }).passthrough(),
1936
+ // ── Turn stream ───────────────────────────────────────────────────────
1937
+ z.object({ type: z.literal("message"), content: z.string() }).passthrough(),
1938
+ z.object({ type: z.literal("thinking"), message: z.string() }).passthrough(),
1939
+ z.object({
1940
+ type: z.literal("tool_use"),
1941
+ tool: z.string(),
1942
+ // Producers send JSON.stringify(input); consumers defend against
1943
+ // object inputs from older agents, so the wire stays permissive here.
1944
+ input: z.unknown().optional()
1945
+ }).passthrough(),
1946
+ z.object({
1947
+ type: z.literal("tool_result"),
1948
+ tool: z.string(),
1949
+ output: z.unknown().optional(),
1950
+ isError: z.boolean().optional(),
1951
+ redactedCount: z.number().optional()
1952
+ }).passthrough(),
1953
+ z.object({ type: z.literal("turn_end"), toolCalls: z.array(TurnEndToolCallSchema) }).passthrough(),
1954
+ z.object({
1955
+ type: z.literal("completed"),
1956
+ summary: z.string().optional(),
1957
+ durationMs: z.number().optional()
1958
+ }).passthrough(),
1959
+ z.object({ type: z.literal("error"), message: z.string() }).passthrough(),
1960
+ z.object({ type: z.literal("agent_typing_start") }).passthrough(),
1961
+ z.object({ type: z.literal("agent_typing_stop") }).passthrough(),
1962
+ // ── Telemetry ─────────────────────────────────────────────────────────
1963
+ // heartbeat/typing: legacy telemetry the server still classifies as
1964
+ // transient (TRANSIENT_EVENT_TYPES) — kept in the vocabulary.
1965
+ z.object({ type: z.literal("heartbeat") }).passthrough(),
1966
+ z.object({ type: z.literal("typing") }).passthrough(),
1967
+ z.object({
1968
+ type: z.literal("context_update"),
1969
+ contextTokens: z.number(),
1970
+ contextWindow: z.number(),
1971
+ inputTokens: z.number().optional(),
1972
+ cacheReadInputTokens: z.number().optional(),
1973
+ cacheCreationInputTokens: z.number().optional(),
1974
+ totalTokensUsed: z.number().optional()
1975
+ }).passthrough(),
1976
+ // Two producer shapes share this type: {rateLimitType, utilization, status}
1977
+ // (SDK rate_limit_event) and {resetsAt} (agent-connection resume notice).
1978
+ z.object({
1979
+ type: z.literal("rate_limit_update"),
1980
+ rateLimitType: z.string().optional(),
1981
+ utilization: z.number().optional(),
1982
+ status: z.string().optional(),
1983
+ resetsAt: z.string().optional()
1984
+ }).passthrough(),
1985
+ z.object({
1986
+ type: z.literal("context_compacted"),
1987
+ trigger: z.string().optional(),
1988
+ preTokens: z.number().optional()
1989
+ }).passthrough(),
1990
+ z.object({
1991
+ type: z.literal("tool_progress"),
1992
+ toolName: z.string().optional(),
1993
+ elapsedSeconds: z.number().optional()
1994
+ }).passthrough(),
1995
+ z.object({
1996
+ type: z.literal("subagent_started"),
1997
+ sdkTaskId: z.string().optional(),
1998
+ description: z.string().optional()
1999
+ }).passthrough(),
2000
+ z.object({
2001
+ type: z.literal("subagent_progress"),
2002
+ sdkTaskId: z.string().optional(),
2003
+ description: z.string().optional(),
2004
+ toolUses: z.number().optional(),
2005
+ durationMs: z.number().optional()
2006
+ }).passthrough(),
2007
+ // ── Work products ─────────────────────────────────────────────────────
2008
+ z.object({ type: z.literal("pr_created"), url: z.string(), number: z.number() }).passthrough(),
2009
+ z.object({
2010
+ type: z.literal("code_review_complete"),
2011
+ result: z.enum(["approved", "changes_requested"]),
2012
+ summary: z.string().optional(),
2013
+ issues: z.array(
2014
+ z.object({
2015
+ file: z.string(),
2016
+ line: z.number().optional(),
2017
+ severity: z.string().optional(),
2018
+ description: z.string().optional()
2019
+ }).passthrough()
2020
+ ).optional()
2021
+ }).passthrough(),
2022
+ // ── Environment setup / start command ─────────────────────────────────
2023
+ z.object({ type: z.literal("setup_output"), stream: z.string(), data: z.string() }).passthrough(),
2024
+ z.object({
2025
+ type: z.literal("setup_complete"),
2026
+ startCommandRunning: z.boolean().optional(),
2027
+ // Sanitized server-side by sanitizeSessionPreviewPorts — stays unknown.
2028
+ previewPorts: z.unknown().optional()
2029
+ }).passthrough(),
2030
+ z.object({ type: z.literal("setup_error"), message: z.string() }).passthrough(),
2031
+ z.object({ type: z.literal("start_command_started") }).passthrough(),
2032
+ z.object({ type: z.literal("start_command_output"), stream: z.string(), data: z.string() }).passthrough(),
2033
+ z.object({
2034
+ type: z.literal("start_command_exited"),
2035
+ code: z.number().nullable().optional(),
2036
+ signal: z.string().nullable().optional(),
2037
+ message: z.string().optional()
2038
+ }).passthrough(),
2039
+ z.object({ type: z.literal("start_command_error"), message: z.string() }).passthrough()
2040
+ ]);
2041
+ var AgentEventSchema = z.union([
2042
+ KnownAgentEventSchema,
2043
+ z.object({ type: z.string().min(1) }).catchall(z.unknown())
2044
+ ]);
2045
+ var AgentHeartbeatSchema = z2.object({
2046
+ sessionId: z2.string().optional(),
2047
+ timestamp: z2.string(),
2048
+ status: z2.enum(["active", "idle", "building"]),
2049
+ currentAction: z2.string().optional(),
1918
2050
  /** Sender-observed main event-loop lag (ms) — see AgentHeartbeat.loopLagMs. */
1919
- loopLagMs: z.number().nonnegative().optional()
2051
+ loopLagMs: z2.number().nonnegative().optional()
1920
2052
  });
1921
- var CreatePRInputSchema = z.object({
1922
- title: z.string().min(1),
1923
- body: z.string(),
1924
- head: z.string().optional(),
1925
- base: z.string().optional()
2053
+ var CreatePRInputSchema = z2.object({
2054
+ title: z2.string().min(1),
2055
+ body: z2.string(),
2056
+ head: z2.string().optional(),
2057
+ base: z2.string().optional()
1926
2058
  });
1927
- var PostToChatInputSchema = z.object({
1928
- message: z.string().min(1),
1929
- type: z.enum(["message", "question", "update"]).optional().default("message")
2059
+ var PostToChatInputSchema = z2.object({
2060
+ message: z2.string().min(1),
2061
+ type: z2.enum(["message", "question", "update"]).optional().default("message")
1930
2062
  });
1931
- var GetTaskContextRequestSchema = z.object({
1932
- sessionId: z.string(),
1933
- includeHistory: z.boolean().optional().default(false)
2063
+ var GetTaskContextRequestSchema = z2.object({
2064
+ sessionId: z2.string(),
2065
+ includeHistory: z2.boolean().optional().default(false)
1934
2066
  });
1935
- var GetChatMessagesRequestSchema = z.object({
1936
- sessionId: z.string(),
1937
- limit: z.number().int().positive().optional().default(50),
1938
- offset: z.number().int().nonnegative().optional().default(0)
2067
+ var GetChatMessagesRequestSchema = z2.object({
2068
+ sessionId: z2.string(),
2069
+ limit: z2.number().int().positive().optional().default(50),
2070
+ offset: z2.number().int().nonnegative().optional().default(0)
1939
2071
  });
1940
- var GetTaskFilesRequestSchema = z.object({
1941
- sessionId: z.string()
2072
+ var GetTaskFilesRequestSchema = z2.object({
2073
+ sessionId: z2.string()
1942
2074
  });
1943
- var GetTaskFileRequestSchema = z.object({
1944
- sessionId: z.string(),
1945
- fileId: z.string()
2075
+ var GetTaskFileRequestSchema = z2.object({
2076
+ sessionId: z2.string(),
2077
+ fileId: z2.string()
1946
2078
  });
1947
- var GetTaskRequestSchema = z.object({
1948
- sessionId: z.string(),
1949
- taskSlugOrId: z.string()
2079
+ var GetTaskRequestSchema = z2.object({
2080
+ sessionId: z2.string(),
2081
+ taskSlugOrId: z2.string()
1950
2082
  });
1951
- var GetCliHistoryRequestSchema = z.object({
1952
- sessionId: z.string(),
1953
- limit: z.number().int().positive().optional().default(100),
1954
- source: z.enum(["agent", "application"]).optional()
2083
+ var GetCliHistoryRequestSchema = z2.object({
2084
+ sessionId: z2.string(),
2085
+ limit: z2.number().int().positive().optional().default(100),
2086
+ source: z2.enum(["agent", "application"]).optional()
1955
2087
  });
1956
- var ListSubtasksRequestSchema = z.object({
1957
- sessionId: z.string(),
2088
+ var ListSubtasksRequestSchema = z2.object({
2089
+ sessionId: z2.string(),
1958
2090
  /** "compact" returns the slim orchestration view (ListSubtasksCompactResponse)
1959
2091
  * with the pack build-slot picture; "full" (default — wire-compat with older
1960
2092
  * agents) returns the verbose SubtaskSummaryDTO[] including description/plan. */
1961
- view: z.enum(["compact", "full"]).optional()
1962
- });
1963
- var GetDependenciesRequestSchema = z.object({
1964
- sessionId: z.string()
1965
- });
1966
- var GetSuggestionsRequestSchema = z.object({
1967
- sessionId: z.string(),
1968
- status: z.string().optional(),
1969
- limit: z.number().int().min(1).max(100).optional()
1970
- });
1971
- var ListManualTestsRequestSchema = z.object({
1972
- sessionId: z.string()
1973
- });
1974
- var QueryManualTestsRequestSchema = z.object({
1975
- sessionId: z.string(),
1976
- cardStatuses: z.array(z.string()).optional(),
1977
- testStatuses: z.array(z.enum(["open", "approved", "rejected"])).optional()
1978
- });
1979
- var CreatePullRequestRequestSchema = CreatePRInputSchema.extend({ sessionId: z.string() });
1980
- var RequestFileUploadRequestSchema = z.object({
1981
- sessionId: z.string(),
1982
- fileName: z.string().min(1).max(255),
1983
- mimeType: z.string().min(1).max(128),
1984
- fileSize: z.number().int().positive().max(MAX_FILE_SIZE_BYTES)
1985
- });
1986
- var ConfirmFileUploadRequestSchema = z.object({
1987
- sessionId: z.string(),
1988
- fileId: z.string(),
1989
- title: z.string().max(500).optional()
1990
- });
1991
- var UpdateTaskStatusRequestSchema = z.object({
1992
- sessionId: z.string(),
1993
- status: z.string(),
1994
- force: z.boolean().optional().default(false)
1995
- });
1996
- var StoreSessionIdRequestSchema = z.object({
1997
- sessionId: z.string(),
1998
- sdkSessionId: z.string()
1999
- });
2000
- var SetManualTestsRequestSchema = z.object({
2001
- sessionId: z.string(),
2002
- items: z.array(z.object({ title: z.string().min(1) })).min(1)
2003
- });
2004
- var EditManualTestRequestSchema = z.object({
2005
- sessionId: z.string(),
2006
- title: z.string().min(1),
2007
- newTitle: z.string().min(1)
2008
- });
2009
- var RemoveManualTestRequestSchema = z.object({
2010
- sessionId: z.string(),
2011
- title: z.string().min(1)
2012
- });
2013
- var ApproveManualTestRequestSchema = z.object({
2014
- sessionId: z.string(),
2015
- title: z.string().min(1)
2016
- });
2017
- var RejectManualTestRequestSchema = z.object({
2018
- sessionId: z.string(),
2019
- title: z.string().min(1),
2020
- reason: z.string().min(1).max(2e3)
2021
- });
2022
- var TrackSpendingRequestSchema = z.object({
2023
- sessionId: z.string(),
2024
- inputTokens: z.number().int().nonnegative(),
2025
- outputTokens: z.number().int().nonnegative(),
2026
- costUsd: z.number().nonnegative(),
2027
- model: z.string()
2028
- });
2029
- var SessionStartRequestSchema = z.object({
2030
- sessionId: z.string(),
2031
- agentVersion: z.string(),
2032
- capabilities: z.array(z.string())
2033
- });
2034
- var SessionStopRequestSchema = z.object({
2035
- sessionId: z.string(),
2036
- reason: z.string().optional()
2037
- });
2038
- var EndReviewSessionRequestSchema = z.object({
2039
- sessionId: z.string(),
2040
- reason: z.enum(["approved", "changes_requested", "finished"]).optional()
2041
- });
2042
- var ConnectAgentRequestSchema = z.object({
2043
- sessionId: z.string()
2044
- });
2045
- var ReportAgentStatusRequestSchema = z.object({
2046
- sessionId: z.string(),
2047
- status: z.string(),
2093
+ view: z2.enum(["compact", "full"]).optional()
2094
+ });
2095
+ var GetDependenciesRequestSchema = z2.object({
2096
+ sessionId: z2.string()
2097
+ });
2098
+ var GetSuggestionsRequestSchema = z2.object({
2099
+ sessionId: z2.string(),
2100
+ status: z2.string().optional(),
2101
+ limit: z2.number().int().min(1).max(100).optional()
2102
+ });
2103
+ var ListManualTestsRequestSchema = z2.object({
2104
+ sessionId: z2.string()
2105
+ });
2106
+ var QueryManualTestsRequestSchema = z2.object({
2107
+ sessionId: z2.string(),
2108
+ cardStatuses: z2.array(z2.string()).optional(),
2109
+ testStatuses: z2.array(z2.enum(["open", "approved", "rejected"])).optional()
2110
+ });
2111
+ var CreatePullRequestRequestSchema = CreatePRInputSchema.extend({ sessionId: z2.string() });
2112
+ var RequestFileUploadRequestSchema = z2.object({
2113
+ sessionId: z2.string(),
2114
+ fileName: z2.string().min(1).max(255),
2115
+ mimeType: z2.string().min(1).max(128),
2116
+ fileSize: z2.number().int().positive().max(MAX_FILE_SIZE_BYTES)
2117
+ });
2118
+ var ConfirmFileUploadRequestSchema = z2.object({
2119
+ sessionId: z2.string(),
2120
+ fileId: z2.string(),
2121
+ title: z2.string().max(500).optional()
2122
+ });
2123
+ var UpdateTaskStatusRequestSchema = z2.object({
2124
+ sessionId: z2.string(),
2125
+ status: z2.string(),
2126
+ force: z2.boolean().optional().default(false)
2127
+ });
2128
+ var StoreSessionIdRequestSchema = z2.object({
2129
+ sessionId: z2.string(),
2130
+ sdkSessionId: z2.string()
2131
+ });
2132
+ var SetManualTestsRequestSchema = z2.object({
2133
+ sessionId: z2.string(),
2134
+ items: z2.array(z2.object({ title: z2.string().min(1) })).min(1)
2135
+ });
2136
+ var EditManualTestRequestSchema = z2.object({
2137
+ sessionId: z2.string(),
2138
+ title: z2.string().min(1),
2139
+ newTitle: z2.string().min(1)
2140
+ });
2141
+ var RemoveManualTestRequestSchema = z2.object({
2142
+ sessionId: z2.string(),
2143
+ title: z2.string().min(1)
2144
+ });
2145
+ var ApproveManualTestRequestSchema = z2.object({
2146
+ sessionId: z2.string(),
2147
+ title: z2.string().min(1)
2148
+ });
2149
+ var RejectManualTestRequestSchema = z2.object({
2150
+ sessionId: z2.string(),
2151
+ title: z2.string().min(1),
2152
+ reason: z2.string().min(1).max(2e3)
2153
+ });
2154
+ var SessionStartRequestSchema = z2.object({
2155
+ sessionId: z2.string(),
2156
+ agentVersion: z2.string(),
2157
+ capabilities: z2.array(z2.string())
2158
+ });
2159
+ var SessionStopRequestSchema = z2.object({
2160
+ sessionId: z2.string(),
2161
+ reason: z2.string().optional()
2162
+ });
2163
+ var EndReviewSessionRequestSchema = z2.object({
2164
+ sessionId: z2.string(),
2165
+ reason: z2.enum(["approved", "changes_requested", "finished"]).optional()
2166
+ });
2167
+ var ConnectAgentRequestSchema = z2.object({
2168
+ sessionId: z2.string()
2169
+ });
2170
+ var ReportAgentStatusRequestSchema = z2.object({
2171
+ sessionId: z2.string(),
2172
+ status: z2.string(),
2048
2173
  /** Why the agent reports this status (e.g. "user_question" while an AskUserQuestion questionnaire is pending in the TUI). */
2049
- reason: z.string().optional(),
2174
+ reason: z2.string().optional(),
2050
2175
  /**
2051
2176
  * The pending question text, sent only alongside `reason: "user_question"`
2052
2177
  * so the server can surface it in the user-question notification body (and
2053
2178
  * thus the Attention feed) instead of a generic string. Optional: older
2054
2179
  * agents omit it and the server falls back to the generic wording.
2055
2180
  */
2056
- questionText: z.string().optional()
2057
- });
2058
- var NotifyAgentVersionRequestSchema = z.object({
2059
- sessionId: z.string(),
2060
- agentVersion: z.string()
2061
- });
2062
- var DiscoveredPortSchema = z.object({
2063
- port: z.number().int().min(1).max(65535),
2064
- label: z.string().min(1).max(64).optional(),
2065
- protocol: z.enum(["http", "tcp"]).optional(),
2066
- detectedAt: z.string()
2067
- });
2068
- var ReportDiscoveredPortsRequestSchema = z.object({
2069
- sessionId: z.string(),
2070
- ports: z.array(DiscoveredPortSchema).max(64)
2071
- });
2072
- var CreateSubtaskRequestSchema = z.object({
2073
- sessionId: z.string(),
2074
- title: z.string().min(1),
2075
- description: z.string().optional(),
2076
- plan: z.string().optional(),
2077
- storyPointValue: z.number().int().positive().optional(),
2078
- ordinal: z.number().int().nonnegative().optional(),
2079
- followParentStatus: z.boolean().optional(),
2181
+ questionText: z2.string().optional()
2182
+ });
2183
+ var NotifyAgentVersionRequestSchema = z2.object({
2184
+ sessionId: z2.string(),
2185
+ agentVersion: z2.string()
2186
+ });
2187
+ var DiscoveredPortSchema = z2.object({
2188
+ port: z2.number().int().min(1).max(65535),
2189
+ label: z2.string().min(1).max(64).optional(),
2190
+ protocol: z2.enum(["http", "tcp"]).optional(),
2191
+ detectedAt: z2.string()
2192
+ });
2193
+ var ReportDiscoveredPortsRequestSchema = z2.object({
2194
+ sessionId: z2.string(),
2195
+ ports: z2.array(DiscoveredPortSchema).max(64)
2196
+ });
2197
+ var CreateSubtaskRequestSchema = z2.object({
2198
+ sessionId: z2.string(),
2199
+ title: z2.string().min(1),
2200
+ description: z2.string().optional(),
2201
+ plan: z2.string().optional(),
2202
+ storyPointValue: z2.number().int().positive().optional(),
2203
+ ordinal: z2.number().int().nonnegative().optional(),
2204
+ followParentStatus: z2.boolean().optional(),
2080
2205
  /** Sibling subtask ids or slugs this subtask blocks on (explicit dependency
2081
2206
  * metadata — preferred over encoding order in plan text / ordinal). */
2082
- dependsOn: z.array(z.string().min(1)).max(32).optional()
2083
- });
2084
- var UpdateSubtaskRequestSchema = z.object({
2085
- sessionId: z.string(),
2086
- subtaskId: z.string(),
2087
- title: z.string().min(1).optional(),
2088
- description: z.string().optional(),
2089
- plan: z.string().optional(),
2207
+ dependsOn: z2.array(z2.string().min(1)).max(32).optional()
2208
+ });
2209
+ var UpdateSubtaskRequestSchema = z2.object({
2210
+ sessionId: z2.string(),
2211
+ subtaskId: z2.string(),
2212
+ title: z2.string().min(1).optional(),
2213
+ description: z2.string().optional(),
2214
+ plan: z2.string().optional(),
2090
2215
  /** Orchestration statuses only ("Planning" | "Open") — the pack parent's
2091
2216
  * sanctioned promotion path. Execution statuses stay with the build
2092
2217
  * pipeline / force_update_task_status. Enforced server-side. */
2093
- status: z.string().optional(),
2218
+ status: z2.string().optional(),
2094
2219
  /** Assign a project agent to the child — accepts the agent's id or exact
2095
2220
  * name; resolved against the parent task's project server-side. */
2096
- agentIdOrName: z.string().min(1).optional(),
2097
- storyPointValue: z.number().int().positive().optional(),
2098
- followParentStatus: z.boolean().optional(),
2221
+ agentIdOrName: z2.string().min(1).optional(),
2222
+ storyPointValue: z2.number().int().positive().optional(),
2223
+ followParentStatus: z2.boolean().optional(),
2099
2224
  /** Replace this subtask's dependency edges with these sibling ids/slugs.
2100
2225
  * Empty array clears all. Omit to leave dependencies unchanged. */
2101
- dependsOn: z.array(z.string().min(1)).max(32).optional()
2102
- });
2103
- var DeleteSubtaskRequestSchema = z.object({
2104
- sessionId: z.string(),
2105
- subtaskId: z.string()
2106
- });
2107
- var GetTaskPropertiesRequestSchema = z.object({
2108
- sessionId: z.string()
2109
- });
2110
- var GetCumulativeSpendingRequestSchema = z.object({
2111
- sessionId: z.string()
2112
- });
2113
- var ModelUsageEntrySchema = z.object({
2114
- model: z.string(),
2115
- inputTokens: z.number().nonnegative(),
2116
- outputTokens: z.number().nonnegative(),
2117
- cacheReadInputTokens: z.number().nonnegative(),
2118
- cacheCreationInputTokens: z.number().nonnegative(),
2119
- costUSD: z.number().nonnegative()
2120
- });
2121
- var GetCumulativeSpendingResponseSchema = z.object({
2122
- totalCostUsd: z.number().nonnegative(),
2123
- modelUsage: z.array(ModelUsageEntrySchema)
2124
- });
2125
- var UpdateTaskFieldsRequestSchema = z.object({
2126
- sessionId: z.string(),
2127
- plan: z.string().optional(),
2128
- description: z.string().optional()
2129
- });
2130
- var UpdateTaskPropertiesRequestSchema = z.object({
2131
- sessionId: z.string(),
2132
- title: z.string().optional(),
2133
- storyPointValue: z.number().int().positive().optional(),
2134
- tagIds: z.array(z.string()).optional(),
2135
- tagNames: z.array(z.string()).optional(),
2136
- githubPRUrl: z.string().url().optional(),
2137
- githubBranch: z.string().optional()
2138
- });
2139
- var ListIconsRequestSchema = z.object({
2140
- sessionId: z.string()
2141
- });
2142
- var GenerateTaskIconRequestSchema = z.object({
2143
- sessionId: z.string(),
2144
- prompt: z.string().min(1),
2145
- aspectRatio: z.string().optional()
2146
- });
2147
- var SearchFaIconsRequestSchema = z.object({
2148
- sessionId: z.string(),
2149
- query: z.string().min(1),
2150
- first: z.number().int().positive().optional()
2151
- });
2152
- var PickFaIconRequestSchema = z.object({
2153
- sessionId: z.string(),
2154
- fontAwesomeId: z.string().min(1),
2155
- fontAwesomeStyle: z.string().optional()
2156
- });
2157
- var CreateFollowUpTaskRequestSchema = z.object({
2158
- sessionId: z.string(),
2159
- title: z.string().min(1),
2160
- description: z.string().optional(),
2161
- plan: z.string().optional(),
2162
- storyPointValue: z.number().int().positive().optional()
2163
- });
2164
- var AddDependencyRequestSchema = z.object({
2165
- sessionId: z.string(),
2166
- dependsOnSlugOrId: z.string()
2167
- });
2168
- var RemoveDependencyRequestSchema = z.object({
2169
- sessionId: z.string(),
2170
- dependsOnSlugOrId: z.string()
2171
- });
2172
- var CreateSuggestionRequestSchema = z.object({
2173
- sessionId: z.string(),
2174
- title: z.string().min(1),
2175
- description: z.string().optional(),
2176
- tagNames: z.array(z.string()).optional()
2177
- });
2178
- var VoteSuggestionRequestSchema = z.object({
2179
- sessionId: z.string(),
2180
- suggestionId: z.string(),
2181
- value: z.union([z.literal(1), z.literal(-1)])
2182
- });
2183
- var TriggerIdentificationRequestSchema = z.object({
2184
- sessionId: z.string()
2185
- });
2186
- var SubmitCodeReviewResultRequestSchema = z.object({
2187
- sessionId: z.string(),
2188
- approved: z.boolean(),
2189
- content: z.string()
2190
- });
2191
- var CycleCodingAgentKeyRequestSchema = z.object({
2192
- sessionId: z.string(),
2193
- rateLimitType: z.string(),
2194
- resetsAt: z.string().optional()
2195
- });
2196
- var StartChildCloudBuildRequestSchema = z.object({
2197
- sessionId: z.string(),
2198
- childTaskId: z.string()
2199
- });
2200
- var StopChildBuildRequestSchema = z.object({
2201
- sessionId: z.string(),
2202
- childTaskId: z.string()
2203
- });
2204
- var ApproveAndMergePRRequestSchema = z.object({
2205
- sessionId: z.string(),
2206
- childTaskId: z.string()
2207
- });
2208
- var PostChildChatMessageRequestSchema = z.object({
2209
- sessionId: z.string(),
2210
- childTaskId: z.string(),
2211
- message: z.string().min(1)
2212
- });
2213
- var UpdateChildStatusRequestSchema = z.object({
2214
- sessionId: z.string(),
2215
- childTaskId: z.string(),
2216
- status: z.string()
2217
- });
2218
- var GetAgentStatusRequestSchema = z.object({
2219
- taskId: z.string()
2220
- });
2221
- var GetUiCliHistoryRequestSchema = z.object({
2222
- taskId: z.string()
2223
- });
2224
- var GetActivePtySessionRequestSchema = z.object({
2225
- taskId: z.string()
2226
- });
2227
- var ListActivePtySessionsRequestSchema = z.object({
2228
- taskId: z.string()
2229
- });
2230
- var SendSoftStopRequestSchema = z.object({
2231
- taskId: z.string()
2232
- });
2233
- var StopTaskSessionRequestSchema = z.object({
2234
- taskId: z.string(),
2235
- sessionId: z.string()
2236
- });
2237
- var FlushTaskQueueRequestSchema = z.object({
2238
- taskId: z.string(),
2239
- softStop: z.boolean().optional()
2240
- });
2241
- var CancelTaskQueuedMessageRequestSchema = z.object({
2242
- taskId: z.string(),
2243
- messageId: z.string()
2244
- });
2245
- var FlushSingleQueuedMessageRequestSchema = z.object({
2246
- taskId: z.string(),
2247
- messageId: z.string(),
2248
- softStop: z.boolean().optional()
2249
- });
2250
- var AnswerAgentQuestionRequestSchema = z.object({
2251
- taskId: z.string(),
2252
- requestId: z.string(),
2253
- answers: z.record(z.string(), z.string())
2254
- });
2255
- var ClearAgentTodosRequestSchema = z.object({
2256
- taskId: z.string()
2257
- });
2258
- var AgentQuestionOptionSchema = z.object({
2259
- label: z.string(),
2260
- description: z.string(),
2261
- preview: z.string().optional()
2262
- });
2263
- var AgentQuestionSchema = z.object({
2264
- question: z.string(),
2265
- header: z.string(),
2266
- options: z.array(AgentQuestionOptionSchema),
2267
- multiSelect: z.boolean().optional()
2268
- });
2269
- var AskUserQuestionRequestSchema = z.object({
2270
- sessionId: z.string(),
2271
- question: z.string().min(1),
2272
- requestId: z.string().min(1),
2273
- questions: z.array(AgentQuestionSchema).min(1)
2274
- });
2275
- var AgentEventSchema = z.object({
2276
- type: z.string().min(1)
2277
- }).catchall(z.unknown());
2278
- var EmitAgentEventRequestSchema = z.object({
2279
- sessionId: z.string(),
2280
- events: z.array(AgentEventSchema).max(500)
2281
- });
2282
- var RefreshGithubTokenRequestSchema = z.object({
2283
- sessionId: z.string()
2284
- });
2285
- var ReportReviewSpawnFailureRequestSchema = z.object({
2286
- sessionId: z.string(),
2287
- reviewSessionId: z.string(),
2288
- error: z.string().max(2e3).optional()
2289
- });
2290
- var SpawnTaskSessionRequestSchema = z.object({
2291
- taskId: z.string(),
2292
- kind: z.enum(["tui", "shell"])
2293
- });
2294
- var SpawnTaskReviewRequestSchema = z.object({
2295
- taskId: z.string()
2296
- });
2297
- var ReportSessionSpawnFailureRequestSchema = z.object({
2298
- sessionId: z.string(),
2299
- spawnedSessionId: z.string(),
2300
- error: z.string().max(2e3).optional()
2301
- });
2302
- var RefreshGithubTokenResponseSchema = z.object({
2303
- token: z.string()
2226
+ dependsOn: z2.array(z2.string().min(1)).max(32).optional()
2304
2227
  });
2305
- var PTY_FRAME_MAX_CHARS = 256 * 1024;
2306
- var PTY_MAX_DIMENSION = 1e3;
2307
- var PtyOutputRequestSchema = z.object({
2308
- sessionId: z.string(),
2309
- data: z.string().max(PTY_FRAME_MAX_CHARS),
2310
- cols: z.number().int().positive().max(PTY_MAX_DIMENSION).optional(),
2311
- rows: z.number().int().positive().max(PTY_MAX_DIMENSION).optional()
2228
+ var DeleteSubtaskRequestSchema = z2.object({
2229
+ sessionId: z2.string(),
2230
+ subtaskId: z2.string()
2312
2231
  });
2313
- var PtyEndedRequestSchema = z.object({
2314
- sessionId: z.string()
2232
+ var GetTaskPropertiesRequestSchema = z2.object({
2233
+ sessionId: z2.string()
2315
2234
  });
2316
- var PtyInputRequestSchema = z.object({
2317
- sessionId: z.string(),
2318
- data: z.string().max(PTY_FRAME_MAX_CHARS)
2235
+ var UpdateTaskFieldsRequestSchema = z2.object({
2236
+ sessionId: z2.string(),
2237
+ plan: z2.string().optional(),
2238
+ description: z2.string().optional()
2319
2239
  });
2320
- var PtyResizeRequestSchema = z.object({
2321
- sessionId: z.string(),
2322
- cols: z.number().int().positive().max(PTY_MAX_DIMENSION),
2323
- rows: z.number().int().positive().max(PTY_MAX_DIMENSION)
2240
+ var UpdateTaskPropertiesRequestSchema = z2.object({
2241
+ sessionId: z2.string(),
2242
+ title: z2.string().optional(),
2243
+ storyPointValue: z2.number().int().positive().optional(),
2244
+ tagIds: z2.array(z2.string()).optional(),
2245
+ tagNames: z2.array(z2.string()).optional(),
2246
+ githubPRUrl: z2.string().url().optional(),
2247
+ githubBranch: z2.string().optional()
2324
2248
  });
2325
- var PtyAttachRequestSchema = z.object({
2326
- sessionId: z.string()
2249
+ var ListIconsRequestSchema = z2.object({
2250
+ sessionId: z2.string()
2327
2251
  });
2328
- var PtyChatEventPayloadSchema = z.discriminatedUnion("kind", [
2329
- z.object({
2330
- kind: z.literal("init"),
2331
- model: z.string().max(200),
2332
- claudeSessionId: z.string().max(100).optional()
2333
- }),
2334
- z.object({ kind: z.literal("user_text"), text: z.string().max(16384) }),
2335
- z.object({ kind: z.literal("assistant_text"), text: z.string().max(16384) }),
2336
- z.object({
2337
- kind: z.literal("tool_use"),
2338
- name: z.string().max(200),
2339
- // Compact preview: JSON.stringify(input) truncated agent-side.
2340
- input: z.string().max(2e3)
2341
- }),
2342
- z.object({ kind: z.literal("turn_end") })
2343
- ]);
2344
- var PtyChatEventRequestSchema = z.object({
2345
- sessionId: z.string(),
2346
- event: PtyChatEventPayloadSchema
2252
+ var GenerateTaskIconRequestSchema = z2.object({
2253
+ sessionId: z2.string(),
2254
+ prompt: z2.string().min(1),
2255
+ aspectRatio: z2.string().optional()
2347
2256
  });
2348
- var PtyChatAttachRequestSchema = z.object({
2349
- sessionId: z.string()
2257
+ var SearchFaIconsRequestSchema = z2.object({
2258
+ sessionId: z2.string(),
2259
+ query: z2.string().min(1),
2260
+ first: z2.number().int().positive().optional()
2350
2261
  });
2351
- var CreatePRResponseSchema = z.object({
2352
- prNumber: z.number().int().positive(),
2353
- prUrl: z.string().url()
2262
+ var PickFaIconRequestSchema = z2.object({
2263
+ sessionId: z2.string(),
2264
+ fontAwesomeId: z2.string().min(1),
2265
+ fontAwesomeStyle: z2.string().optional()
2354
2266
  });
2355
- var PostToChatResponseSchema = z.object({
2356
- messageId: z.string()
2267
+ var CreateFollowUpTaskRequestSchema = z2.object({
2268
+ sessionId: z2.string(),
2269
+ title: z2.string().min(1),
2270
+ description: z2.string().optional(),
2271
+ plan: z2.string().optional(),
2272
+ storyPointValue: z2.number().int().positive().optional()
2357
2273
  });
2358
- var UpdateTaskStatusResponseSchema = z.object({
2359
- taskId: z.string(),
2360
- status: z.string()
2274
+ var AddDependencyRequestSchema = z2.object({
2275
+ sessionId: z2.string(),
2276
+ dependsOnSlugOrId: z2.string()
2361
2277
  });
2362
- var StoreSessionIdResponseSchema = z.object({
2363
- success: z.boolean()
2278
+ var RemoveDependencyRequestSchema = z2.object({
2279
+ sessionId: z2.string(),
2280
+ dependsOnSlugOrId: z2.string()
2364
2281
  });
2365
- var HeartbeatResponseSchema = z.object({
2366
- acknowledged: z.boolean()
2282
+ var CreateSuggestionRequestSchema = z2.object({
2283
+ sessionId: z2.string(),
2284
+ title: z2.string().min(1),
2285
+ description: z2.string().optional(),
2286
+ tagNames: z2.array(z2.string()).optional()
2367
2287
  });
2368
- var SessionStartResponseSchema = z.object({
2369
- sessionId: z.string(),
2370
- startedAt: z.string()
2288
+ var VoteSuggestionRequestSchema = z2.object({
2289
+ sessionId: z2.string(),
2290
+ suggestionId: z2.string(),
2291
+ value: z2.union([z2.literal(1), z2.literal(-1)])
2371
2292
  });
2372
- var SessionStopResponseSchema = z.object({
2373
- sessionId: z.string(),
2374
- stoppedAt: z.string()
2293
+ var TriggerIdentificationRequestSchema = z2.object({
2294
+ sessionId: z2.string()
2375
2295
  });
2376
- var DeleteSubtaskResponseSchema = z.object({
2377
- deleted: z.boolean()
2296
+ var SubmitCodeReviewResultRequestSchema = z2.object({
2297
+ sessionId: z2.string(),
2298
+ approved: z2.boolean(),
2299
+ content: z2.string()
2378
2300
  });
2379
- var ListAccessibleProjectsRequestSchema = z2.object({
2380
- pageSize: z2.number().int().positive().max(100).optional().default(100)
2301
+ var CycleCodingAgentKeyRequestSchema = z2.object({
2302
+ sessionId: z2.string(),
2303
+ rateLimitType: z2.string(),
2304
+ resetsAt: z2.string().optional()
2381
2305
  });
2382
- var ListProjectTasksRequestSchema = z2.object({
2383
- projectId: z2.string(),
2384
- status: z2.string().optional(),
2385
- assigneeId: z2.string().optional(),
2386
- unassigned: z2.boolean().optional(),
2387
- limit: z2.number().int().positive().optional().default(50)
2388
- }).refine((p) => !(p.unassigned && p.assigneeId), {
2389
- message: "Pass either assigneeId or unassigned, not both"
2306
+ var StartChildCloudBuildRequestSchema = z2.object({
2307
+ sessionId: z2.string(),
2308
+ childTaskId: z2.string()
2309
+ });
2310
+ var StopChildBuildRequestSchema = z2.object({
2311
+ sessionId: z2.string(),
2312
+ childTaskId: z2.string()
2313
+ });
2314
+ var ApproveAndMergePRRequestSchema = z2.object({
2315
+ sessionId: z2.string(),
2316
+ childTaskId: z2.string()
2317
+ });
2318
+ var PostChildChatMessageRequestSchema = z2.object({
2319
+ sessionId: z2.string(),
2320
+ childTaskId: z2.string(),
2321
+ message: z2.string().min(1)
2322
+ });
2323
+ var UpdateChildStatusRequestSchema = z2.object({
2324
+ sessionId: z2.string(),
2325
+ childTaskId: z2.string(),
2326
+ status: z2.string()
2390
2327
  });
2391
- var GetProjectTaskRequestSchema = z2.object({
2392
- projectId: z2.string(),
2328
+ var GetAgentStatusRequestSchema = z2.object({
2393
2329
  taskId: z2.string()
2394
2330
  });
2395
- var SearchProjectTasksRequestSchema = z2.object({
2396
- projectId: z2.string(),
2397
- tagNames: z2.array(z2.string()).optional(),
2398
- searchQuery: z2.string().optional(),
2399
- statusFilters: z2.array(z2.string()).optional(),
2400
- // Card types to include. Omitted/empty → defaults to ["task"] in the handler so
2401
- // search doesn't surface incidents/suggestions unless asked. Enum validation lives
2402
- // at the MCP tool layer (mirrors statusFilters).
2403
- typeFilters: z2.array(z2.string()).optional(),
2404
- assigneeId: z2.string().optional(),
2405
- unassigned: z2.boolean().optional(),
2406
- limit: z2.number().int().positive().optional().default(20)
2407
- }).refine((p) => !(p.unassigned && p.assigneeId), {
2408
- message: "Pass either assigneeId or unassigned, not both"
2331
+ var GetUiCliHistoryRequestSchema = z2.object({
2332
+ taskId: z2.string()
2409
2333
  });
2410
- var ListProjectTagsRequestSchema = z2.object({
2411
- projectId: z2.string()
2334
+ var GetActivePtySessionRequestSchema = z2.object({
2335
+ taskId: z2.string()
2412
2336
  });
2413
- var GetProjectSummaryRequestSchema = z2.object({
2414
- projectId: z2.string()
2337
+ var ListActivePtySessionsRequestSchema = z2.object({
2338
+ taskId: z2.string()
2415
2339
  });
2416
- var CreateProjectTaskRequestSchema = z2.object({
2417
- projectId: z2.string(),
2418
- title: z2.string().min(1),
2419
- description: z2.string().optional(),
2420
- plan: z2.string().optional(),
2421
- status: z2.string().optional(),
2422
- requestingUserId: z2.string().optional()
2340
+ var SendSoftStopRequestSchema = z2.object({
2341
+ taskId: z2.string()
2423
2342
  });
2424
- var UpdateProjectTaskRequestSchema = z2.object({
2425
- projectId: z2.string(),
2343
+ var StopTaskSessionRequestSchema = z2.object({
2426
2344
  taskId: z2.string(),
2427
- title: z2.string().optional(),
2428
- description: z2.string().optional(),
2429
- plan: z2.string().optional(),
2430
- status: z2.string().optional(),
2431
- assignedUserId: z2.string().nullish(),
2432
- requestingUserId: z2.string().optional()
2345
+ sessionId: z2.string()
2433
2346
  });
2434
- var PostToProjectTaskChatRequestSchema = z2.object({
2435
- projectId: z2.string(),
2347
+ var FlushTaskQueueRequestSchema = z2.object({
2436
2348
  taskId: z2.string(),
2437
- content: z2.string(),
2438
- requestingUserId: z2.string().optional()
2349
+ softStop: z2.boolean().optional()
2439
2350
  });
2440
- var GetProjectTaskCliRequestSchema = z2.object({
2441
- projectId: z2.string(),
2351
+ var CancelTaskQueuedMessageRequestSchema = z2.object({
2442
2352
  taskId: z2.string(),
2443
- limit: z2.number().int().positive().optional().default(50),
2444
- source: z2.string().optional()
2353
+ messageId: z2.string()
2445
2354
  });
2446
- var GetProjectTaskSessionsRequestSchema = z2.object({
2447
- projectId: z2.string(),
2448
- taskId: z2.string()
2449
- });
2450
- var QueryProjectGcpLogsRequestSchema = z2.object({
2451
- projectId: z2.string(),
2452
- env: z2.enum(["prod", "dev", "claudespace"]).optional(),
2453
- severity: z2.enum(["DEBUG", "INFO", "NOTICE", "WARNING", "ERROR", "CRITICAL", "ALERT", "EMERGENCY"]).optional(),
2454
- services: z2.array(z2.string().min(1).max(200)).max(25).optional(),
2455
- sqlInstances: z2.array(z2.string().min(1).max(200)).max(25).optional(),
2456
- allServices: z2.boolean().optional(),
2457
- search: z2.string().max(256).optional(),
2458
- filter: z2.string().max(1e3).optional(),
2459
- startTime: z2.string().optional(),
2460
- endTime: z2.string().optional(),
2461
- limit: z2.number().int().min(1).max(200).optional().default(50),
2462
- pageToken: z2.string().max(4096).optional()
2463
- });
2464
- var StartProjectBuildRequestSchema = z2.object({
2465
- projectId: z2.string(),
2355
+ var FlushSingleQueuedMessageRequestSchema = z2.object({
2466
2356
  taskId: z2.string(),
2467
- requestingUserId: z2.string().optional()
2357
+ messageId: z2.string(),
2358
+ softStop: z2.boolean().optional()
2468
2359
  });
2469
- var StopProjectBuildRequestSchema = z2.object({
2470
- projectId: z2.string(),
2360
+ var AnswerAgentQuestionRequestSchema = z2.object({
2471
2361
  taskId: z2.string(),
2472
- requestingUserId: z2.string().optional()
2362
+ requestId: z2.string(),
2363
+ answers: z2.record(z2.string(), z2.string())
2473
2364
  });
2474
- var StartProjectWorkspaceRequestSchema = z2.object({
2475
- projectId: z2.string(),
2476
- requestingUserId: z2.string().optional()
2365
+ var ClearAgentTodosRequestSchema = z2.object({
2366
+ taskId: z2.string()
2477
2367
  });
2478
- var StopProjectWorkspaceRequestSchema = z2.object({
2479
- projectId: z2.string(),
2480
- destroy: z2.boolean().optional(),
2481
- requestingUserId: z2.string().optional()
2368
+ var AgentQuestionOptionSchema = z2.object({
2369
+ label: z2.string(),
2370
+ description: z2.string(),
2371
+ preview: z2.string().optional()
2482
2372
  });
2483
- var ListMyLiveSessionsRequestSchema = z2.object({
2484
- projectId: z2.string(),
2485
- /** Admin-only: list another member's sessions instead of the caller's. */
2486
- targetUserId: z2.string().optional()
2373
+ var AgentQuestionSchema = z2.object({
2374
+ question: z2.string(),
2375
+ header: z2.string(),
2376
+ options: z2.array(AgentQuestionOptionSchema),
2377
+ multiSelect: z2.boolean().optional()
2487
2378
  });
2488
- var ListProjectSessionGroupsRequestSchema = z2.object({
2489
- projectId: z2.string()
2379
+ var AskUserQuestionRequestSchema = z2.object({
2380
+ sessionId: z2.string(),
2381
+ question: z2.string().min(1),
2382
+ requestId: z2.string().min(1),
2383
+ questions: z2.array(AgentQuestionSchema).min(1)
2490
2384
  });
2491
- var GetProjectAvailableTuisRequestSchema = z2.object({
2492
- projectId: z2.string()
2385
+ var EmitAgentEventRequestSchema = z2.object({
2386
+ sessionId: z2.string(),
2387
+ events: z2.array(AgentEventSchema).max(500)
2493
2388
  });
2494
- var StartAdhocSessionRequestSchema = z2.object({
2495
- projectId: z2.string(),
2496
- label: z2.string().max(200).optional(),
2497
- /** Coding-agent key to launch under — validated pick-time (ownership + TUI availability) in the handler. */
2498
- codingAgentKeyId: z2.string().optional(),
2499
- /**
2500
- * Session role. Constrained: other task-less modes fall through to the pm
2501
- * runner in the pod entrypoint, and "review" would crash without a task.
2502
- */
2503
- mode: z2.enum(["adhoc", "pm"]).optional(),
2504
- /** Base branch to check out (defaults to the project's dev branch). */
2505
- branch: z2.string().max(300).optional(),
2506
- requestingUserId: z2.string().optional()
2507
- });
2508
- var StopAdhocSessionRequestSchema = z2.object({
2509
- projectId: z2.string(),
2510
- workspaceId: z2.string(),
2511
- destroy: z2.boolean().optional(),
2512
- requestingUserId: z2.string().optional()
2513
- });
2514
- var ResumeAdhocSessionRequestSchema = z2.object({
2515
- projectId: z2.string(),
2516
- workspaceId: z2.string(),
2517
- requestingUserId: z2.string().optional()
2518
- });
2519
- var CreateProjectReleaseRequestSchema = z2.object({
2520
- projectId: z2.string(),
2521
- taskIds: z2.array(z2.string()).optional(),
2522
- requestingUserId: z2.string().optional()
2523
- });
2524
- var ApproveProjectMergePRRequestSchema = z2.object({
2525
- projectId: z2.string(),
2526
- childTaskId: z2.string(),
2527
- requestingUserId: z2.string().optional()
2389
+ var RefreshGithubTokenRequestSchema = z2.object({
2390
+ sessionId: z2.string()
2528
2391
  });
2529
- var ListProjectSubtasksRequestSchema = z2.object({
2530
- projectId: z2.string(),
2392
+ var ReportReviewSpawnFailureRequestSchema = z2.object({
2393
+ sessionId: z2.string(),
2394
+ reviewSessionId: z2.string(),
2395
+ error: z2.string().max(2e3).optional()
2396
+ });
2397
+ var SpawnTaskSessionRequestSchema = z2.object({
2398
+ taskId: z2.string(),
2399
+ kind: z2.enum(["tui", "shell"])
2400
+ });
2401
+ var SpawnTaskReviewRequestSchema = z2.object({
2531
2402
  taskId: z2.string()
2532
2403
  });
2533
- var CreateProjectSubtaskRequestSchema = z2.object({
2534
- projectId: z2.string(),
2535
- parentTaskId: z2.string(),
2536
- title: z2.string().min(1),
2537
- description: z2.string().optional(),
2538
- plan: z2.string().optional(),
2539
- ordinal: z2.number().int().nonnegative().optional(),
2540
- storyPointValue: z2.number().int().positive().optional(),
2541
- followParentStatus: z2.boolean().optional(),
2542
- /** Sibling subtask ids or slugs this subtask blocks on (explicit dependency
2543
- * metadata — preferred over encoding order in plan text / ordinal). */
2544
- dependsOn: z2.array(z2.string().min(1)).max(32).optional(),
2545
- requestingUserId: z2.string().optional()
2404
+ var ReportSessionSpawnFailureRequestSchema = z2.object({
2405
+ sessionId: z2.string(),
2406
+ spawnedSessionId: z2.string(),
2407
+ error: z2.string().max(2e3).optional()
2546
2408
  });
2547
- var UpdateProjectSubtaskRequestSchema = z2.object({
2548
- projectId: z2.string(),
2549
- subtaskId: z2.string(),
2550
- title: z2.string().optional(),
2551
- description: z2.string().optional(),
2552
- plan: z2.string().optional(),
2553
- status: z2.string().optional(),
2554
- ordinal: z2.number().int().nonnegative().optional(),
2555
- storyPointValue: z2.number().int().positive().optional(),
2556
- followParentStatus: z2.boolean().optional(),
2557
- requestingUserId: z2.string().optional()
2409
+ var RefreshGithubTokenResponseSchema = z2.object({
2410
+ token: z2.string()
2558
2411
  });
2559
- var DeleteProjectSubtaskRequestSchema = z2.object({
2560
- projectId: z2.string(),
2561
- subtaskId: z2.string(),
2562
- requestingUserId: z2.string().optional()
2412
+ var PTY_FRAME_MAX_CHARS = 256 * 1024;
2413
+ var PTY_MAX_DIMENSION = 1e3;
2414
+ var PtyOutputRequestSchema = z2.object({
2415
+ sessionId: z2.string(),
2416
+ data: z2.string().max(PTY_FRAME_MAX_CHARS),
2417
+ cols: z2.number().int().positive().max(PTY_MAX_DIMENSION).optional(),
2418
+ rows: z2.number().int().positive().max(PTY_MAX_DIMENSION).optional()
2419
+ });
2420
+ var PtyEndedRequestSchema = z2.object({
2421
+ sessionId: z2.string()
2422
+ });
2423
+ var PtyInputRequestSchema = z2.object({
2424
+ sessionId: z2.string(),
2425
+ data: z2.string().max(PTY_FRAME_MAX_CHARS)
2426
+ });
2427
+ var PtyResizeRequestSchema = z2.object({
2428
+ sessionId: z2.string(),
2429
+ cols: z2.number().int().positive().max(PTY_MAX_DIMENSION),
2430
+ rows: z2.number().int().positive().max(PTY_MAX_DIMENSION)
2431
+ });
2432
+ var PtyAttachRequestSchema = z2.object({
2433
+ sessionId: z2.string()
2434
+ });
2435
+ var PtyChatEventPayloadSchema = z2.discriminatedUnion("kind", [
2436
+ z2.object({
2437
+ kind: z2.literal("init"),
2438
+ model: z2.string().max(200),
2439
+ claudeSessionId: z2.string().max(100).optional()
2440
+ }),
2441
+ z2.object({ kind: z2.literal("user_text"), text: z2.string().max(16384) }),
2442
+ z2.object({ kind: z2.literal("assistant_text"), text: z2.string().max(16384) }),
2443
+ z2.object({
2444
+ kind: z2.literal("tool_use"),
2445
+ name: z2.string().max(200),
2446
+ // Compact preview: JSON.stringify(input) truncated agent-side.
2447
+ input: z2.string().max(2e3)
2448
+ }),
2449
+ z2.object({ kind: z2.literal("turn_end") })
2450
+ ]);
2451
+ var PtyChatEventRequestSchema = z2.object({
2452
+ sessionId: z2.string(),
2453
+ event: PtyChatEventPayloadSchema
2563
2454
  });
2564
- var GetProjectTaskChatRequestSchema = z2.object({
2565
- projectId: z2.string(),
2566
- taskId: z2.string(),
2567
- limit: z2.number().int().positive().optional().default(20)
2455
+ var PtyChatAttachRequestSchema = z2.object({
2456
+ sessionId: z2.string()
2568
2457
  });
2569
- var AddProjectTaskDependencyRequestSchema = z2.object({
2570
- projectId: z2.string(),
2571
- taskId: z2.string(),
2572
- dependsOnSlugOrId: z2.string(),
2573
- requestingUserId: z2.string().optional()
2458
+ var CreatePRResponseSchema = z2.object({
2459
+ prNumber: z2.number().int().positive(),
2460
+ prUrl: z2.string().url()
2461
+ });
2462
+ var PostToChatResponseSchema = z2.object({
2463
+ messageId: z2.string()
2574
2464
  });
2575
- var RemoveProjectTaskDependencyRequestSchema = z2.object({
2576
- projectId: z2.string(),
2465
+ var UpdateTaskStatusResponseSchema = z2.object({
2577
2466
  taskId: z2.string(),
2578
- dependsOnSlugOrId: z2.string(),
2579
- requestingUserId: z2.string().optional()
2467
+ status: z2.string()
2580
2468
  });
2581
- var VoteProjectSuggestionRequestSchema = z2.object({
2582
- projectId: z2.string(),
2583
- suggestionId: z2.string(),
2584
- value: z2.union([z2.literal(1), z2.literal(-1)]),
2585
- requestingUserId: z2.string().optional()
2469
+ var StoreSessionIdResponseSchema = z2.object({
2470
+ success: z2.boolean()
2586
2471
  });
2587
- var GetProjectTaskDependenciesRequestSchema = z2.object({
2588
- projectId: z2.string(),
2589
- taskId: z2.string()
2472
+ var HeartbeatResponseSchema = z2.object({
2473
+ acknowledged: z2.boolean()
2590
2474
  });
2591
- var ListProjectTaskFilesRequestSchema = z2.object({
2592
- projectId: z2.string(),
2593
- taskId: z2.string()
2475
+ var SessionStartResponseSchema = z2.object({
2476
+ sessionId: z2.string(),
2477
+ startedAt: z2.string()
2594
2478
  });
2595
- var GetProjectAttachmentRequestSchema = z2.object({
2596
- projectId: z2.string(),
2597
- taskId: z2.string(),
2598
- fileId: z2.string(),
2599
- /** Byte offset into text content (paging large logs/JSON). Default 0. */
2600
- offset: z2.number().int().nonnegative().optional(),
2601
- /** Max bytes of text content to return from `offset`. Server default applies. */
2602
- maxBytes: z2.number().int().positive().optional()
2479
+ var SessionStopResponseSchema = z2.object({
2480
+ sessionId: z2.string(),
2481
+ stoppedAt: z2.string()
2603
2482
  });
2604
- var RequestProjectFileUploadRequestSchema = z2.object({
2605
- projectId: z2.string(),
2606
- taskId: z2.string(),
2607
- fileName: z2.string().min(1).max(255),
2608
- mimeType: z2.string().min(1).max(128),
2609
- fileSize: z2.number().int().positive().max(MAX_FILE_SIZE_BYTES),
2610
- requestingUserId: z2.string().optional()
2483
+ var DeleteSubtaskResponseSchema = z2.object({
2484
+ deleted: z2.boolean()
2611
2485
  });
2612
- var ConfirmProjectFileUploadRequestSchema = z2.object({
2613
- projectId: z2.string(),
2614
- taskId: z2.string(),
2615
- fileId: z2.string(),
2616
- /** When set, the attachment is also posted to the task chat with this text. */
2617
- comment: z2.string().max(2e3).optional(),
2618
- requestingUserId: z2.string().optional()
2486
+ var ListAccessibleProjectsRequestSchema = z3.object({
2487
+ pageSize: z3.number().int().positive().max(100).optional().default(100)
2619
2488
  });
2620
- var CreateProjectPullRequestRequestSchema = z2.object({
2621
- projectId: z2.string(),
2622
- taskId: z2.string(),
2623
- title: z2.string().min(1),
2624
- body: z2.string(),
2625
- head: z2.string().optional(),
2626
- base: z2.string().optional(),
2627
- requestingUserId: z2.string().optional()
2489
+ var ListProjectTasksRequestSchema = z3.object({
2490
+ projectId: z3.string(),
2491
+ status: z3.string().optional(),
2492
+ assigneeId: z3.string().optional(),
2493
+ unassigned: z3.boolean().optional(),
2494
+ limit: z3.number().int().positive().optional().default(50)
2495
+ }).refine((p) => !(p.unassigned && p.assigneeId), {
2496
+ message: "Pass either assigneeId or unassigned, not both"
2628
2497
  });
2629
- var ListProjectMembersRequestSchema = z2.object({
2630
- projectId: z2.string()
2498
+ var GetProjectTaskRequestSchema = z3.object({
2499
+ projectId: z3.string(),
2500
+ taskId: z3.string()
2631
2501
  });
2632
- var AddProjectTaskReviewerRequestSchema = z2.object({
2633
- projectId: z2.string(),
2634
- taskId: z2.string(),
2635
- userId: z2.string(),
2636
- requestingUserId: z2.string().optional()
2502
+ var SearchProjectTasksRequestSchema = z3.object({
2503
+ projectId: z3.string(),
2504
+ tagNames: z3.array(z3.string()).optional(),
2505
+ searchQuery: z3.string().optional(),
2506
+ statusFilters: z3.array(z3.string()).optional(),
2507
+ // Card types to include. Omitted/empty → defaults to ["task"] in the handler so
2508
+ // search doesn't surface incidents/suggestions unless asked. Enum validation lives
2509
+ // at the MCP tool layer (mirrors statusFilters).
2510
+ typeFilters: z3.array(z3.string()).optional(),
2511
+ assigneeId: z3.string().optional(),
2512
+ unassigned: z3.boolean().optional(),
2513
+ limit: z3.number().int().positive().optional().default(20)
2514
+ }).refine((p) => !(p.unassigned && p.assigneeId), {
2515
+ message: "Pass either assigneeId or unassigned, not both"
2637
2516
  });
2638
- var RemoveProjectTaskReviewerRequestSchema = z2.object({
2639
- projectId: z2.string(),
2640
- taskId: z2.string(),
2641
- userId: z2.string(),
2642
- requestingUserId: z2.string().optional()
2517
+ var ListProjectTagsRequestSchema = z3.object({
2518
+ projectId: z3.string()
2519
+ });
2520
+ var GetProjectSummaryRequestSchema = z3.object({
2521
+ projectId: z3.string()
2522
+ });
2523
+ var CreateProjectTaskRequestSchema = z3.object({
2524
+ projectId: z3.string(),
2525
+ title: z3.string().min(1),
2526
+ description: z3.string().optional(),
2527
+ plan: z3.string().optional(),
2528
+ status: z3.string().optional(),
2529
+ requestingUserId: z3.string().optional()
2530
+ });
2531
+ var UpdateProjectTaskRequestSchema = z3.object({
2532
+ projectId: z3.string(),
2533
+ taskId: z3.string(),
2534
+ title: z3.string().optional(),
2535
+ description: z3.string().optional(),
2536
+ plan: z3.string().optional(),
2537
+ status: z3.string().optional(),
2538
+ assignedUserId: z3.string().nullish(),
2539
+ requestingUserId: z3.string().optional()
2540
+ });
2541
+ var PostToProjectTaskChatRequestSchema = z3.object({
2542
+ projectId: z3.string(),
2543
+ taskId: z3.string(),
2544
+ content: z3.string(),
2545
+ requestingUserId: z3.string().optional()
2546
+ });
2547
+ var GetProjectTaskCliRequestSchema = z3.object({
2548
+ projectId: z3.string(),
2549
+ taskId: z3.string(),
2550
+ limit: z3.number().int().positive().optional().default(50),
2551
+ source: z3.string().optional()
2552
+ });
2553
+ var GetProjectTaskSessionsRequestSchema = z3.object({
2554
+ projectId: z3.string(),
2555
+ taskId: z3.string()
2556
+ });
2557
+ var QueryProjectGcpLogsRequestSchema = z3.object({
2558
+ projectId: z3.string(),
2559
+ env: z3.enum(["prod", "dev", "claudespace"]).optional(),
2560
+ severity: z3.enum(["DEBUG", "INFO", "NOTICE", "WARNING", "ERROR", "CRITICAL", "ALERT", "EMERGENCY"]).optional(),
2561
+ services: z3.array(z3.string().min(1).max(200)).max(25).optional(),
2562
+ sqlInstances: z3.array(z3.string().min(1).max(200)).max(25).optional(),
2563
+ allServices: z3.boolean().optional(),
2564
+ search: z3.string().max(256).optional(),
2565
+ filter: z3.string().max(1e3).optional(),
2566
+ startTime: z3.string().optional(),
2567
+ endTime: z3.string().optional(),
2568
+ limit: z3.number().int().min(1).max(200).optional().default(50),
2569
+ pageToken: z3.string().max(4096).optional()
2570
+ });
2571
+ var StartProjectBuildRequestSchema = z3.object({
2572
+ projectId: z3.string(),
2573
+ taskId: z3.string(),
2574
+ requestingUserId: z3.string().optional()
2575
+ });
2576
+ var StopProjectBuildRequestSchema = z3.object({
2577
+ projectId: z3.string(),
2578
+ taskId: z3.string(),
2579
+ requestingUserId: z3.string().optional()
2580
+ });
2581
+ var StartProjectWorkspaceRequestSchema = z3.object({
2582
+ projectId: z3.string(),
2583
+ requestingUserId: z3.string().optional()
2584
+ });
2585
+ var StopProjectWorkspaceRequestSchema = z3.object({
2586
+ projectId: z3.string(),
2587
+ destroy: z3.boolean().optional(),
2588
+ requestingUserId: z3.string().optional()
2589
+ });
2590
+ var ListMyLiveSessionsRequestSchema = z3.object({
2591
+ projectId: z3.string(),
2592
+ /** Admin-only: list another member's sessions instead of the caller's. */
2593
+ targetUserId: z3.string().optional()
2643
2594
  });
2644
- var ListProjectManualTestsRequestSchema = z2.object({
2645
- projectId: z2.string(),
2646
- taskId: z2.string()
2595
+ var ListProjectSessionGroupsRequestSchema = z3.object({
2596
+ projectId: z3.string()
2647
2597
  });
2648
- var QueryProjectManualTestsRequestSchema = z2.object({
2649
- projectId: z2.string(),
2650
- cardStatuses: z2.array(z2.string()).optional(),
2651
- testStatuses: z2.array(z2.enum(["open", "approved", "rejected"])).optional()
2598
+ var GetProjectAvailableTuisRequestSchema = z3.object({
2599
+ projectId: z3.string()
2652
2600
  });
2653
- var SetProjectManualTestsRequestSchema = z2.object({
2654
- projectId: z2.string(),
2655
- taskId: z2.string(),
2656
- items: z2.array(z2.object({ title: z2.string().min(1) })).min(1),
2657
- requestingUserId: z2.string().optional()
2601
+ var StartAdhocSessionRequestSchema = z3.object({
2602
+ projectId: z3.string(),
2603
+ label: z3.string().max(200).optional(),
2604
+ /** Coding-agent key to launch under — validated pick-time (ownership + TUI availability) in the handler. */
2605
+ codingAgentKeyId: z3.string().optional(),
2606
+ /**
2607
+ * Session role. Constrained: other task-less modes fall through to the pm
2608
+ * runner in the pod entrypoint, and "review" would crash without a task.
2609
+ */
2610
+ mode: z3.enum(["adhoc", "pm"]).optional(),
2611
+ /** Base branch to check out (defaults to the project's dev branch). */
2612
+ branch: z3.string().max(300).optional(),
2613
+ requestingUserId: z3.string().optional()
2614
+ });
2615
+ var StopAdhocSessionRequestSchema = z3.object({
2616
+ projectId: z3.string(),
2617
+ workspaceId: z3.string(),
2618
+ destroy: z3.boolean().optional(),
2619
+ requestingUserId: z3.string().optional()
2620
+ });
2621
+ var ResumeAdhocSessionRequestSchema = z3.object({
2622
+ projectId: z3.string(),
2623
+ workspaceId: z3.string(),
2624
+ requestingUserId: z3.string().optional()
2625
+ });
2626
+ var CreateProjectReleaseRequestSchema = z3.object({
2627
+ projectId: z3.string(),
2628
+ taskIds: z3.array(z3.string()).optional(),
2629
+ requestingUserId: z3.string().optional()
2630
+ });
2631
+ var ApproveProjectMergePRRequestSchema = z3.object({
2632
+ projectId: z3.string(),
2633
+ childTaskId: z3.string(),
2634
+ requestingUserId: z3.string().optional()
2635
+ });
2636
+ var ListProjectSubtasksRequestSchema = z3.object({
2637
+ projectId: z3.string(),
2638
+ taskId: z3.string()
2639
+ });
2640
+ var CreateProjectSubtaskRequestSchema = z3.object({
2641
+ projectId: z3.string(),
2642
+ parentTaskId: z3.string(),
2643
+ title: z3.string().min(1),
2644
+ description: z3.string().optional(),
2645
+ plan: z3.string().optional(),
2646
+ ordinal: z3.number().int().nonnegative().optional(),
2647
+ storyPointValue: z3.number().int().positive().optional(),
2648
+ followParentStatus: z3.boolean().optional(),
2649
+ /** Sibling subtask ids or slugs this subtask blocks on (explicit dependency
2650
+ * metadata — preferred over encoding order in plan text / ordinal). */
2651
+ dependsOn: z3.array(z3.string().min(1)).max(32).optional(),
2652
+ requestingUserId: z3.string().optional()
2653
+ });
2654
+ var UpdateProjectSubtaskRequestSchema = z3.object({
2655
+ projectId: z3.string(),
2656
+ subtaskId: z3.string(),
2657
+ title: z3.string().optional(),
2658
+ description: z3.string().optional(),
2659
+ plan: z3.string().optional(),
2660
+ status: z3.string().optional(),
2661
+ ordinal: z3.number().int().nonnegative().optional(),
2662
+ storyPointValue: z3.number().int().positive().optional(),
2663
+ followParentStatus: z3.boolean().optional(),
2664
+ requestingUserId: z3.string().optional()
2665
+ });
2666
+ var DeleteProjectSubtaskRequestSchema = z3.object({
2667
+ projectId: z3.string(),
2668
+ subtaskId: z3.string(),
2669
+ requestingUserId: z3.string().optional()
2670
+ });
2671
+ var GetProjectTaskChatRequestSchema = z3.object({
2672
+ projectId: z3.string(),
2673
+ taskId: z3.string(),
2674
+ limit: z3.number().int().positive().optional().default(20)
2675
+ });
2676
+ var AddProjectTaskDependencyRequestSchema = z3.object({
2677
+ projectId: z3.string(),
2678
+ taskId: z3.string(),
2679
+ dependsOnSlugOrId: z3.string(),
2680
+ requestingUserId: z3.string().optional()
2681
+ });
2682
+ var RemoveProjectTaskDependencyRequestSchema = z3.object({
2683
+ projectId: z3.string(),
2684
+ taskId: z3.string(),
2685
+ dependsOnSlugOrId: z3.string(),
2686
+ requestingUserId: z3.string().optional()
2687
+ });
2688
+ var VoteProjectSuggestionRequestSchema = z3.object({
2689
+ projectId: z3.string(),
2690
+ suggestionId: z3.string(),
2691
+ value: z3.union([z3.literal(1), z3.literal(-1)]),
2692
+ requestingUserId: z3.string().optional()
2693
+ });
2694
+ var GetProjectTaskDependenciesRequestSchema = z3.object({
2695
+ projectId: z3.string(),
2696
+ taskId: z3.string()
2697
+ });
2698
+ var ListProjectTaskFilesRequestSchema = z3.object({
2699
+ projectId: z3.string(),
2700
+ taskId: z3.string()
2701
+ });
2702
+ var GetProjectAttachmentRequestSchema = z3.object({
2703
+ projectId: z3.string(),
2704
+ taskId: z3.string(),
2705
+ fileId: z3.string(),
2706
+ /** Byte offset into text content (paging large logs/JSON). Default 0. */
2707
+ offset: z3.number().int().nonnegative().optional(),
2708
+ /** Max bytes of text content to return from `offset`. Server default applies. */
2709
+ maxBytes: z3.number().int().positive().optional()
2710
+ });
2711
+ var RequestProjectFileUploadRequestSchema = z3.object({
2712
+ projectId: z3.string(),
2713
+ taskId: z3.string(),
2714
+ fileName: z3.string().min(1).max(255),
2715
+ mimeType: z3.string().min(1).max(128),
2716
+ fileSize: z3.number().int().positive().max(MAX_FILE_SIZE_BYTES),
2717
+ requestingUserId: z3.string().optional()
2718
+ });
2719
+ var ConfirmProjectFileUploadRequestSchema = z3.object({
2720
+ projectId: z3.string(),
2721
+ taskId: z3.string(),
2722
+ fileId: z3.string(),
2723
+ /** When set, the attachment is also posted to the task chat with this text. */
2724
+ comment: z3.string().max(2e3).optional(),
2725
+ requestingUserId: z3.string().optional()
2726
+ });
2727
+ var CreateProjectPullRequestRequestSchema = z3.object({
2728
+ projectId: z3.string(),
2729
+ taskId: z3.string(),
2730
+ title: z3.string().min(1),
2731
+ body: z3.string(),
2732
+ head: z3.string().optional(),
2733
+ base: z3.string().optional(),
2734
+ requestingUserId: z3.string().optional()
2735
+ });
2736
+ var ListProjectMembersRequestSchema = z3.object({
2737
+ projectId: z3.string()
2738
+ });
2739
+ var AddProjectTaskReviewerRequestSchema = z3.object({
2740
+ projectId: z3.string(),
2741
+ taskId: z3.string(),
2742
+ userId: z3.string(),
2743
+ requestingUserId: z3.string().optional()
2744
+ });
2745
+ var RemoveProjectTaskReviewerRequestSchema = z3.object({
2746
+ projectId: z3.string(),
2747
+ taskId: z3.string(),
2748
+ userId: z3.string(),
2749
+ requestingUserId: z3.string().optional()
2750
+ });
2751
+ var ListProjectManualTestsRequestSchema = z3.object({
2752
+ projectId: z3.string(),
2753
+ taskId: z3.string()
2754
+ });
2755
+ var QueryProjectManualTestsRequestSchema = z3.object({
2756
+ projectId: z3.string(),
2757
+ cardStatuses: z3.array(z3.string()).optional(),
2758
+ testStatuses: z3.array(z3.enum(["open", "approved", "rejected"])).optional()
2759
+ });
2760
+ var SetProjectManualTestsRequestSchema = z3.object({
2761
+ projectId: z3.string(),
2762
+ taskId: z3.string(),
2763
+ items: z3.array(z3.object({ title: z3.string().min(1) })).min(1),
2764
+ requestingUserId: z3.string().optional()
2765
+ });
2766
+ var EditProjectManualTestRequestSchema = z3.object({
2767
+ projectId: z3.string(),
2768
+ taskId: z3.string(),
2769
+ title: z3.string().min(1),
2770
+ newTitle: z3.string().min(1),
2771
+ requestingUserId: z3.string().optional()
2772
+ });
2773
+ var RemoveProjectManualTestRequestSchema = z3.object({
2774
+ projectId: z3.string(),
2775
+ taskId: z3.string(),
2776
+ title: z3.string().min(1),
2777
+ requestingUserId: z3.string().optional()
2778
+ });
2779
+ var ApproveProjectManualTestRequestSchema = z3.object({
2780
+ projectId: z3.string(),
2781
+ taskId: z3.string(),
2782
+ title: z3.string().min(1),
2783
+ requestingUserId: z3.string().optional()
2784
+ });
2785
+ var RejectProjectManualTestRequestSchema = z3.object({
2786
+ projectId: z3.string(),
2787
+ taskId: z3.string(),
2788
+ title: z3.string().min(1),
2789
+ reason: z3.string().min(1).max(2e3),
2790
+ requestingUserId: z3.string().optional()
2791
+ });
2792
+ var CreateProjectSuggestionRequestSchema = z3.object({
2793
+ projectId: z3.string(),
2794
+ title: z3.string().min(1),
2795
+ description: z3.string().optional(),
2796
+ tagNames: z3.array(z3.string()).optional(),
2797
+ requestingUserId: z3.string().optional()
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()
2658
2875
  });
2659
- var EditProjectManualTestRequestSchema = z2.object({
2660
- projectId: z2.string(),
2661
- taskId: z2.string(),
2662
- title: z2.string().min(1),
2663
- newTitle: z2.string().min(1),
2664
- requestingUserId: z2.string().optional()
2876
+ var GetTaskAuditsRequestSchema = z4.object({
2877
+ projectId: z4.string(),
2878
+ limit: z4.number().int().positive().max(200).optional().default(50)
2665
2879
  });
2666
- var RemoveProjectManualTestRequestSchema = z2.object({
2667
- projectId: z2.string(),
2668
- taskId: z2.string(),
2669
- title: z2.string().min(1),
2670
- requestingUserId: z2.string().optional()
2880
+ var GetTaskAuditRequestSchema = z4.object({
2881
+ projectId: z4.string(),
2882
+ auditId: z4.string()
2671
2883
  });
2672
- var ApproveProjectManualTestRequestSchema = z2.object({
2673
- projectId: z2.string(),
2674
- taskId: z2.string(),
2675
- title: z2.string().min(1),
2676
- requestingUserId: z2.string().optional()
2884
+ var GetTaskAuditAggregatesRequestSchema = z4.object({
2885
+ projectId: z4.string()
2677
2886
  });
2678
- var RejectProjectManualTestRequestSchema = z2.object({
2679
- projectId: z2.string(),
2680
- taskId: z2.string(),
2681
- title: z2.string().min(1),
2682
- reason: z2.string().min(1).max(2e3),
2683
- requestingUserId: z2.string().optional()
2887
+ var DeleteTaskAuditRequestSchema = z4.object({
2888
+ projectId: z4.string(),
2889
+ auditId: z4.string(),
2890
+ requestingUserId: z4.string().optional()
2684
2891
  });
2685
- var CreateProjectSuggestionRequestSchema = z2.object({
2686
- projectId: z2.string(),
2687
- title: z2.string().min(1),
2688
- description: z2.string().optional(),
2689
- tagNames: z2.array(z2.string()).optional(),
2690
- requestingUserId: z2.string().optional()
2892
+ var MarkInitialPromptSubmittedRequestSchema = z4.object({
2893
+ sessionId: z4.string()
2691
2894
  });
2692
2895
  var AGENT_STATUS_REASON_USER_QUESTION = "user_question";
2693
2896
  var TASK_CHAT_HISTORY_LIMIT = 20;
@@ -3816,7 +4019,7 @@ var PtyOutputCoalescer = class {
3816
4019
 
3817
4020
  // src/harness/pty/tool-server.ts
3818
4021
  import { createServer as createServer2 } from "http";
3819
- import { z as z3 } from "zod";
4022
+ import { z as z5 } from "zod";
3820
4023
  import { writeFile as writeFile3 } from "fs/promises";
3821
4024
  import { join as join2 } from "path";
3822
4025
  import { randomBytes } from "crypto";
@@ -3873,7 +4076,7 @@ var PtyToolServer = class {
3873
4076
  const mcp = new McpServer({ name: this.name, version: "1.0.0" });
3874
4077
  const register = mcp.registerTool.bind(mcp);
3875
4078
  for (const tool2 of this.tools) {
3876
- const inputSchema = tool2.strict ? z3.strictObject(tool2.schema) : tool2.schema;
4079
+ const inputSchema = tool2.strict ? z5.strictObject(tool2.schema) : tool2.schema;
3877
4080
  register(
3878
4081
  tool2.name,
3879
4082
  {
@@ -4156,12 +4359,12 @@ var defaultSleep = (ms) => new Promise((resolve) => {
4156
4359
  setTimeout(resolve, ms);
4157
4360
  });
4158
4361
  async function writeWithReadBackRetry(io2, contents, delaysMs = READ_BACK_DELAYS_MS) {
4159
- const sleep4 = io2.sleep ?? defaultSleep;
4362
+ const sleep2 = io2.sleep ?? defaultSleep;
4160
4363
  for (let attempt = 0; ; attempt++) {
4161
4364
  await io2.write(contents);
4162
4365
  if (await io2.read() === contents) return true;
4163
4366
  if (attempt >= delaysMs.length) return false;
4164
- await sleep4(delaysMs[attempt]);
4367
+ await sleep2(delaysMs[attempt]);
4165
4368
  }
4166
4369
  }
4167
4370
  function fsWriteIo(path4, mode) {
@@ -4501,11 +4704,6 @@ function renderPromptContentText(content) {
4501
4704
  return JSON.stringify(block);
4502
4705
  }).join("\n\n");
4503
4706
  }
4504
- function sleep3(ms) {
4505
- return new Promise((resolve) => {
4506
- setTimeout(resolve, ms);
4507
- });
4508
- }
4509
4707
  async function transcriptSize(path4) {
4510
4708
  try {
4511
4709
  return (await stat2(path4)).size;
@@ -5004,7 +5202,7 @@ var PtySession = class {
5004
5202
  if (text === "" && !this.adapter.capabilities.prefill) return;
5005
5203
  this.writeStdin(this.adapter.encodePromptBytes(text));
5006
5204
  if (this.turn.promptDelivery === "prefill") return;
5007
- await sleep3(resolveSubmitSettleMs());
5205
+ await sleep(resolveSubmitSettleMs());
5008
5206
  if (this._toreDown) return;
5009
5207
  this.writeStdin("\r");
5010
5208
  if (this.adapter.capabilities.structuredEvents) this.armSubmitNudge();
@@ -6814,7 +7012,7 @@ async function buildInitialPrompt(mode, context, isAuto, agentMode) {
6814
7012
  }
6815
7013
 
6816
7014
  // src/tools/task-context-tools.ts
6817
- import { z as z4 } from "zod";
7015
+ import { z as z6 } from "zod";
6818
7016
 
6819
7017
  // src/tools/helpers.ts
6820
7018
  function textResult(text) {
@@ -6848,8 +7046,8 @@ function buildReadTaskChatTool(connection) {
6848
7046
  "read_task_chat",
6849
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.",
6850
7048
  {
6851
- limit: z4.number().optional().describe("Number of recent messages to fetch (default 20)"),
6852
- task_id: z4.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.")
6853
7051
  },
6854
7052
  async ({ limit, task_id }) => {
6855
7053
  try {
@@ -6893,7 +7091,7 @@ function buildGetTaskTool(connection) {
6893
7091
  "get_task",
6894
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.",
6895
7093
  {
6896
- slug_or_id: z4.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")
6897
7095
  },
6898
7096
  async ({ slug_or_id }) => {
6899
7097
  try {
@@ -6916,9 +7114,9 @@ function buildGetExecutionLogsTool(connection) {
6916
7114
  "get_execution_logs",
6917
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.",
6918
7116
  {
6919
- task_id: z4.string().optional().describe("Task ID or slug. Omit to read logs from the current task."),
6920
- source: z4.enum(["agent", "application"]).optional().describe("Filter by log source. Omit for all logs."),
6921
- limit: z4.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).")
6922
7120
  },
6923
7121
  async ({ task_id, source, limit }) => {
6924
7122
  try {
@@ -6978,7 +7176,7 @@ function buildGetAttachmentTool(connection) {
6978
7176
  return defineTool(
6979
7177
  "get_attachment",
6980
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.",
6981
- { fileId: z4.string().describe("The file ID to retrieve") },
7179
+ { fileId: z6.string().describe("The file ID to retrieve") },
6982
7180
  async ({ fileId }) => {
6983
7181
  try {
6984
7182
  const file = await connection.call("getTaskFile", {
@@ -7016,7 +7214,7 @@ function buildTaskContextTools(connection) {
7016
7214
  }
7017
7215
 
7018
7216
  // src/tools/dependency-suggestion-tools.ts
7019
- import { z as z5 } from "zod";
7217
+ import { z as z7 } from "zod";
7020
7218
  function buildGetDependenciesTool(connection) {
7021
7219
  return defineTool(
7022
7220
  "get_dependencies",
@@ -7042,10 +7240,10 @@ function buildGetSuggestionsTool(connection) {
7042
7240
  "get_suggestions",
7043
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.",
7044
7242
  {
7045
- status: z5.string().optional().describe(
7243
+ status: z7.string().optional().describe(
7046
7244
  "Filter by status: Planning, Open, InProgress, ReviewPR, ReviewDev, ReviewLive, Complete, Cancelled"
7047
7245
  ),
7048
- limit: z5.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)")
7049
7247
  },
7050
7248
  async ({ status, limit }) => {
7051
7249
  try {
@@ -7069,14 +7267,14 @@ function buildGetSuggestionsTool(connection) {
7069
7267
  }
7070
7268
 
7071
7269
  // src/tools/mutation-tools.ts
7072
- import { z as z6 } from "zod";
7270
+ import { z as z8 } from "zod";
7073
7271
  function buildPostToChatTool(connection) {
7074
7272
  return defineTool(
7075
7273
  "post_to_chat",
7076
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.",
7077
7275
  {
7078
- message: z6.string().describe("The message to post to the team"),
7079
- task_id: z6.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.")
7080
7278
  },
7081
7279
  async ({ message, task_id }) => {
7082
7280
  try {
@@ -7114,8 +7312,8 @@ function buildForceUpdateTaskStatusTool(connection) {
7114
7312
  "force_update_task_status",
7115
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.",
7116
7314
  {
7117
- status: z6.enum(["InProgress", "ReviewPR", "ReviewDev", "Complete"]).describe("The new status for the task"),
7118
- task_id: z6.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.")
7119
7317
  },
7120
7318
  async ({ status, task_id }) => {
7121
7319
  try {
@@ -7146,18 +7344,18 @@ function buildCreatePullRequestTool(connection, config) {
7146
7344
  "create_pull_request",
7147
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.",
7148
7346
  {
7149
- title: z6.string().describe("The PR title"),
7150
- body: z6.string().describe("The PR description/body in markdown"),
7151
- branch: z6.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(
7152
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."
7153
7351
  ),
7154
- baseBranch: z6.string().optional().describe(
7352
+ baseBranch: z8.string().optional().describe(
7155
7353
  "The base branch to target for the PR (e.g. 'main', 'develop'). Defaults to the project's configured dev branch."
7156
7354
  ),
7157
- commitMessage: z6.string().optional().describe(
7355
+ commitMessage: z8.string().optional().describe(
7158
7356
  "Commit message for staging uncommitted changes. If not provided, a default message based on the PR title will be used."
7159
7357
  ),
7160
- skipVerify: z6.boolean().optional().describe(
7358
+ skipVerify: z8.boolean().optional().describe(
7161
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."
7162
7360
  )
7163
7361
  },
@@ -7239,7 +7437,7 @@ function buildAddDependencyTool(connection) {
7239
7437
  "add_dependency",
7240
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.",
7241
7439
  {
7242
- depends_on_slug_or_id: z6.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")
7243
7441
  },
7244
7442
  async ({ depends_on_slug_or_id }) => {
7245
7443
  try {
@@ -7261,7 +7459,7 @@ function buildRemoveDependencyTool(connection) {
7261
7459
  "remove_dependency",
7262
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.",
7263
7461
  {
7264
- depends_on_slug_or_id: z6.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")
7265
7463
  },
7266
7464
  async ({ depends_on_slug_or_id }) => {
7267
7465
  try {
@@ -7283,10 +7481,10 @@ function buildCreateFollowUpTaskTool(connection) {
7283
7481
  "create_follow_up_task",
7284
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.",
7285
7483
  {
7286
- title: z6.string().describe("Follow-up task title"),
7287
- description: z6.string().optional().describe("Brief description of the follow-up work"),
7288
- plan: z6.string().optional().describe("Implementation plan if known"),
7289
- story_point_value: z6.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)")
7290
7488
  },
7291
7489
  async ({ title, description, plan, story_point_value }) => {
7292
7490
  try {
@@ -7313,11 +7511,11 @@ function buildCreateSuggestionTool(connection) {
7313
7511
  "create_suggestion",
7314
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.",
7315
7513
  {
7316
- title: z6.string().describe("Short title for the suggestion"),
7317
- description: z6.string().optional().describe(
7514
+ title: z8.string().describe("Short title for the suggestion"),
7515
+ description: z8.string().optional().describe(
7318
7516
  "1-2 sentence description of what should change and why. Keep concise and project-focused."
7319
7517
  ),
7320
- tag_names: z6.array(z6.string()).optional().describe("Tag names to categorize the suggestion")
7518
+ tag_names: z8.array(z8.string()).optional().describe("Tag names to categorize the suggestion")
7321
7519
  },
7322
7520
  async ({ title, description, tag_names }) => {
7323
7521
  try {
@@ -7346,8 +7544,8 @@ function buildVoteSuggestionTool(connection) {
7346
7544
  "vote_suggestion",
7347
7545
  "Vote +1 or -1 on a project suggestion. Use to express support or disagreement with a specific suggestion returned by get_suggestions.",
7348
7546
  {
7349
- suggestion_id: z6.string().describe("The suggestion ID to vote on"),
7350
- value: z6.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")
7351
7549
  },
7352
7550
  async ({ suggestion_id, value }) => {
7353
7551
  try {
@@ -7380,7 +7578,7 @@ function buildMutationTools(connection, config) {
7380
7578
  // src/tools/attachment-tools.ts
7381
7579
  import { readFile as readFile3, stat as stat4 } from "fs/promises";
7382
7580
  import { basename, extname, isAbsolute, join as join5 } from "path";
7383
- import { z as z7 } from "zod";
7581
+ import { z as z9 } from "zod";
7384
7582
  var IMAGE_MIME_BY_EXT = {
7385
7583
  ".png": "image/png",
7386
7584
  ".jpg": "image/jpeg",
@@ -7393,8 +7591,8 @@ function buildUploadAttachmentTool(connection, config) {
7393
7591
  "upload_attachment",
7394
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.",
7395
7593
  {
7396
- path: z7.string().describe("Path to the image file \u2014 absolute, or relative to the workspace root"),
7397
- title: z7.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)")
7398
7596
  },
7399
7597
  async ({ path: path4, title }) => {
7400
7598
  try {
@@ -7450,7 +7648,7 @@ function buildUploadAttachmentTool(connection, config) {
7450
7648
  }
7451
7649
 
7452
7650
  // src/tools/checklist-tools.ts
7453
- import { z as z8 } from "zod";
7651
+ import { z as z10 } from "zod";
7454
7652
  function buildListManualTestsTool(connection) {
7455
7653
  return defineTool(
7456
7654
  "list_manual_tests",
@@ -7502,8 +7700,8 @@ function buildQueryManualTestsTool(connection) {
7502
7700
  "query_manual_tests",
7503
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.",
7504
7702
  {
7505
- cardStatuses: z8.array(z8.string()).optional().describe('Filter tasks by card status, e.g. ["ReviewDev", "ReviewLive"]'),
7506
- testStatuses: z8.array(z8.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")
7507
7705
  },
7508
7706
  async ({ cardStatuses, testStatuses }) => {
7509
7707
  try {
@@ -7527,7 +7725,7 @@ function buildSetManualTestsTool(connection) {
7527
7725
  "set_manual_tests",
7528
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.",
7529
7727
  {
7530
- items: z8.array(z8.object({ title: z8.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")
7531
7729
  },
7532
7730
  async ({ items }) => {
7533
7731
  try {
@@ -7550,8 +7748,8 @@ function buildEditManualTestTool(connection) {
7550
7748
  "edit_manual_test",
7551
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.",
7552
7750
  {
7553
- title: z8.string().min(1).describe("The current title of the manual test to edit"),
7554
- newTitle: z8.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")
7555
7753
  },
7556
7754
  async ({ title, newTitle }) => {
7557
7755
  try {
@@ -7573,7 +7771,7 @@ function buildRemoveManualTestTool(connection) {
7573
7771
  "remove_manual_test",
7574
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.",
7575
7773
  {
7576
- title: z8.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")
7577
7775
  },
7578
7776
  async ({ title }) => {
7579
7777
  try {
@@ -7594,7 +7792,7 @@ function buildApproveManualTestTool(connection) {
7594
7792
  "approve_manual_test",
7595
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.",
7596
7794
  {
7597
- title: z8.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")
7598
7796
  },
7599
7797
  async ({ title }) => {
7600
7798
  try {
@@ -7615,8 +7813,8 @@ function buildRejectManualTestTool(connection) {
7615
7813
  "reject_manual_test",
7616
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.",
7617
7815
  {
7618
- title: z8.string().min(1).describe("The title of the manual test to reject"),
7619
- reason: z8.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")
7620
7818
  },
7621
7819
  async ({ title, reason }) => {
7622
7820
  try {
@@ -7653,7 +7851,7 @@ function buildCommonTools(connection, config) {
7653
7851
  }
7654
7852
 
7655
7853
  // src/tools/pm-tools.ts
7656
- import { z as z9 } from "zod";
7854
+ import { z as z11 } from "zod";
7657
7855
  var SP_DESCRIPTION = "Story point value (1=Common, 2=Magic, 3=Rare, 5=Unique)";
7658
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.";
7659
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.";
@@ -7662,8 +7860,8 @@ function buildUpdateTaskTool(connection) {
7662
7860
  "update_task_plan",
7663
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.",
7664
7862
  {
7665
- plan: z9.string().optional().describe("The task plan in markdown"),
7666
- description: z9.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")
7667
7865
  },
7668
7866
  async ({ plan, description }) => {
7669
7867
  try {
@@ -7684,13 +7882,13 @@ function buildCreateSubtaskTool(connection) {
7684
7882
  "create_subtask",
7685
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.",
7686
7884
  {
7687
- title: z9.string().describe("Subtask title"),
7688
- description: z9.string().optional().describe("Brief description"),
7689
- plan: z9.string().optional().describe("Implementation plan in markdown"),
7690
- ordinal: z9.number().optional().describe("Step/order number (0-based)"),
7691
- storyPointValue: z9.number().optional().describe(SP_DESCRIPTION),
7692
- followParentStatus: z9.boolean().optional().describe(FOLLOW_PARENT_STATUS_DESCRIPTION),
7693
- dependsOn: z9.array(z9.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)
7694
7892
  },
7695
7893
  async ({
7696
7894
  title,
@@ -7726,20 +7924,20 @@ function buildUpdateSubtaskTool(connection) {
7726
7924
  "update_subtask",
7727
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.",
7728
7926
  {
7729
- subtaskId: z9.string().describe("The subtask ID to update"),
7730
- title: z9.string().optional(),
7731
- description: z9.string().optional(),
7732
- plan: z9.string().optional(),
7733
- status: z9.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(
7734
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.'
7735
7933
  ),
7736
- agentIdOrName: z9.string().optional().describe(
7934
+ agentIdOrName: z11.string().optional().describe(
7737
7935
  "Assign a project agent to the child (agent id or exact name from the Project Agents list). Required before start_child_cloud_build."
7738
7936
  ),
7739
- ordinal: z9.number().optional(),
7740
- storyPointValue: z9.number().optional().describe(SP_DESCRIPTION),
7741
- followParentStatus: z9.boolean().optional().describe(FOLLOW_PARENT_STATUS_DESCRIPTION),
7742
- dependsOn: z9.array(z9.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(
7743
7941
  `${DEPENDS_ON_DESCRIPTION} Replaces the full dependency set \u2014 pass [] to clear all, omit to leave unchanged.`
7744
7942
  )
7745
7943
  },
@@ -7778,7 +7976,7 @@ function buildDeleteSubtaskTool(connection) {
7778
7976
  return defineTool(
7779
7977
  "delete_subtask",
7780
7978
  "Delete a subtask by id. When to use: a subtask was created in error or is no longer needed. Returns: confirmation string.",
7781
- { subtaskId: z9.string().describe("The subtask ID to delete") },
7979
+ { subtaskId: z11.string().describe("The subtask ID to delete") },
7782
7980
  async ({ subtaskId }) => {
7783
7981
  try {
7784
7982
  await connection.call("deleteSubtask", {
@@ -7797,7 +7995,7 @@ function buildListSubtasksTool(connection) {
7797
7995
  "list_subtasks",
7798
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.",
7799
7997
  {
7800
- verbose: z9.boolean().optional().describe(
7998
+ verbose: z11.boolean().optional().describe(
7801
7999
  "Return full task rows including description and plan text (large \u2014 can exceed tool result limits on big packs). Default: compact orchestration view."
7802
8000
  )
7803
8001
  },
@@ -7821,7 +8019,7 @@ function buildPackTools(connection) {
7821
8019
  "start_child_cloud_build",
7822
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.",
7823
8021
  {
7824
- childTaskId: z9.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")
7825
8023
  },
7826
8024
  async ({ childTaskId }) => {
7827
8025
  try {
@@ -7841,7 +8039,7 @@ function buildPackTools(connection) {
7841
8039
  "stop_child_build",
7842
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).",
7843
8041
  {
7844
- childTaskId: z9.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")
7845
8043
  },
7846
8044
  async ({ childTaskId }) => {
7847
8045
  try {
@@ -7861,7 +8059,7 @@ function buildPackTools(connection) {
7861
8059
  "approve_and_merge_pr",
7862
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.",
7863
8061
  {
7864
- childTaskId: z9.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")
7865
8063
  },
7866
8064
  async ({ childTaskId }) => {
7867
8065
  try {
@@ -7899,7 +8097,7 @@ function buildPmTools(connection, options) {
7899
8097
  }
7900
8098
 
7901
8099
  // src/tools/discovery-tools.ts
7902
- import { z as z10 } from "zod";
8100
+ import { z as z12 } from "zod";
7903
8101
  var SP_DESCRIPTION2 = "Story point value (1=Common, 2=Magic, 3=Rare, 5=Unique). The key is 'storyPointValue' \u2014 not 'storyPoints'.";
7904
8102
  var VALID_PROPERTY_KEYS = "title, storyPointValue, tagNames, githubPRUrl, githubBranch";
7905
8103
  function buildDiscoveryTools(connection) {
@@ -7908,11 +8106,11 @@ function buildDiscoveryTools(connection) {
7908
8106
  "update_task_properties",
7909
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.",
7910
8108
  {
7911
- title: z10.string().optional().describe("The new task title"),
7912
- storyPointValue: z10.number().optional().describe(SP_DESCRIPTION2),
7913
- tagNames: z10.array(z10.string()).optional().describe("Array of tag names to assign"),
7914
- githubPRUrl: z10.string().url().optional().describe("GitHub pull request URL to link to this task"),
7915
- githubBranch: z10.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')")
7916
8114
  },
7917
8115
  async ({ title, storyPointValue, tagNames, githubPRUrl, githubBranch }) => {
7918
8116
  try {
@@ -7953,7 +8151,7 @@ function buildDiscoveryTools(connection) {
7953
8151
  }
7954
8152
 
7955
8153
  // src/tools/code-review-tools.ts
7956
- import { z as z11 } from "zod";
8154
+ import { z as z13 } from "zod";
7957
8155
  async function endReviewSession(connection, reason) {
7958
8156
  await connection.call("endReviewSession", {
7959
8157
  sessionId: connection.sessionId,
@@ -7966,7 +8164,7 @@ function buildCodeReviewTools(connection) {
7966
8164
  "approve_code_review",
7967
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.",
7968
8166
  {
7969
- summary: z11.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")
7970
8168
  },
7971
8169
  async ({ summary }) => {
7972
8170
  const content = `**Code Review: Approved** :white_check_mark:
@@ -7990,15 +8188,15 @@ ${summary}`;
7990
8188
  "request_code_changes",
7991
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 }.",
7992
8190
  {
7993
- issues: z11.array(
7994
- z11.object({
7995
- file: z11.string().describe("File path where the issue was found"),
7996
- line: z11.number().optional().describe("Line number (if applicable)"),
7997
- severity: z11.enum(["critical", "major", "minor"]).describe("Issue severity"),
7998
- description: z11.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")
7999
8197
  })
8000
8198
  ).describe("List of issues found during review"),
8001
- summary: z11.string().describe("Brief overall summary of the review findings")
8199
+ summary: z13.string().describe("Brief overall summary of the review findings")
8002
8200
  },
8003
8201
  async ({ issues, summary }) => {
8004
8202
  const issueLines = issues.map((issue) => {
@@ -10218,7 +10416,7 @@ async function readListeningPorts() {
10218
10416
  }
10219
10417
  var DEFAULT_EXCLUDED_PORTS = [2222, 5432, 6379, 9200];
10220
10418
  var DEFAULT_EPHEMERAL_PORT_MIN = 32768;
10221
- var DEFAULT_INTERVAL_MS = 15e3;
10419
+ var DEFAULT_DISCOVERY_INTERVAL_MS = 15e3;
10222
10420
  var DEFAULT_MAX_PORTS = 16;
10223
10421
  var CONFIRM_SCANS = 2;
10224
10422
  var PortDiscovery = class {
@@ -10244,7 +10442,7 @@ var PortDiscovery = class {
10244
10442
  lastReportedKey = "";
10245
10443
  constructor(options) {
10246
10444
  this.opts = options;
10247
- this.intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;
10445
+ this.intervalMs = options.intervalMs ?? DEFAULT_DISCOVERY_INTERVAL_MS;
10248
10446
  this.maxPorts = options.maxPorts ?? DEFAULT_MAX_PORTS;
10249
10447
  this.excluded = new Set(options.excludedPorts ?? DEFAULT_EXCLUDED_PORTS);
10250
10448
  this.ephemeralPortMin = options.ephemeralPortMin ?? DEFAULT_EPHEMERAL_PORT_MIN;
@@ -11504,6 +11702,7 @@ export {
11504
11702
  TUI_KINDS,
11505
11703
  DEFAULT_LIFECYCLE_CONFIG,
11506
11704
  Lifecycle,
11705
+ defineTool,
11507
11706
  cleanTerminalOutput,
11508
11707
  loadPtySpawn,
11509
11708
  inheritedEnv,
@@ -11511,6 +11710,8 @@ export {
11511
11710
  ClaudeTuiAdapter,
11512
11711
  PtyHarness,
11513
11712
  createServiceLogger,
11713
+ textResult,
11714
+ GIT_TIMEOUT_MS,
11514
11715
  hasUncommittedChanges,
11515
11716
  getCurrentBranch,
11516
11717
  hasUnpushedCommits,
@@ -11541,4 +11742,4 @@ export {
11541
11742
  runStartCommand,
11542
11743
  unshallowRepo
11543
11744
  };
11544
- //# sourceMappingURL=chunk-H3OGNJS4.js.map
11745
+ //# sourceMappingURL=chunk-KEKGEDN2.js.map