@sideboard-ai/core 0.1.135 → 0.1.139

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.
Files changed (35) hide show
  1. package/dist/{agents-RTQFF7PY.js → agents-665S7Z3R.js} +5 -5
  2. package/dist/{agents-O3AJMI2Y.js → agents-OC3XM7UE.js} +5 -5
  3. package/dist/{chunk-KBBXNS2V.js → chunk-23KCPND2.js} +49 -6
  4. package/dist/{chunk-2ESCEK2Q.js → chunk-5XH5M6RA.js} +244 -5
  5. package/dist/{chunk-57GIFU3X.js → chunk-7SYFWPOZ.js} +5 -5
  6. package/dist/{chunk-N62K3KXX.js → chunk-CDJISVKN.js} +79 -6
  7. package/dist/{chunk-QAV3HGVS.js → chunk-DJJ3DTT4.js} +1 -1
  8. package/dist/{chunk-HQQNLDVC.js → chunk-DKXZCIB2.js} +1 -1
  9. package/dist/{chunk-XUEI4GCF.js → chunk-E2RE7P2S.js} +286 -5
  10. package/dist/{chunk-J5IBSVB3.js → chunk-EUXOHTUK.js} +42 -25
  11. package/dist/{chunk-RDULVW3E.js → chunk-HLIHBGVO.js} +2 -2
  12. package/dist/{chunk-K7EX47QG.js → chunk-RTX3AY42.js} +5 -5
  13. package/dist/{chunk-LOKXPQ4U.js → chunk-SSBM4GZX.js} +2 -2
  14. package/dist/{chunk-PM3C2J6K.js → chunk-TUGKX5BD.js} +42 -25
  15. package/dist/{chunk-Z5LYMW7M.js → chunk-YZQEJOAU.js} +189 -248
  16. package/dist/{chunk-XIKEUCNC.js → chunk-ZCLHAOFR.js} +211 -299
  17. package/dist/{coordinator-prompt-FYMWE33S.js → coordinator-prompt-43O6EPA2.js} +3 -3
  18. package/dist/{coordinator-prompt-Y737IIFR.js → coordinator-prompt-4TXU6Q3R.js} +3 -3
  19. package/dist/{global-workspace-6KH6BSKL.js → global-workspace-VIU57E3Y.js} +4 -4
  20. package/dist/{global-workspace-ZFKNLBZA.js → global-workspace-ZDYKHQ4O.js} +4 -4
  21. package/dist/index.cjs +1019 -670
  22. package/dist/index.d.cts +41 -3
  23. package/dist/index.d.ts +41 -3
  24. package/dist/index.js +83 -24
  25. package/dist/mcp/run-stdio.cjs +831 -544
  26. package/dist/mcp/run-stdio.js +55 -16
  27. package/dist/{orchestrator-3YDPPZHZ.js → orchestrator-WEFXUHFX.js} +7 -7
  28. package/dist/{orchestrator-2BRAPJ47.js → orchestrator-ZCMYSDTC.js} +7 -7
  29. package/dist/{thread-store-FADXSMEJ.js → thread-store-57ZLHR3A.js} +1 -1
  30. package/dist/{thread-store-CRLQJ2HM.js → thread-store-WGASXXXR.js} +1 -1
  31. package/dist/{workspaces-3RRF3LVF.js → workspaces-4HYGNH4B.js} +5 -5
  32. package/dist/{workspaces-AYI5DHK4.js → workspaces-ALCTB65T.js} +5 -5
  33. package/dist/{worktree-MX7XBX6Z.js → worktree-GXD2NGOZ.js} +2 -2
  34. package/dist/{worktree-BC6XDMQK.js → worktree-NSNZODAM.js} +2 -2
  35. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  AGENT_GIT_ACTIONS,
3
3
  BOARD_COLUMN_DEFS,
4
+ CHARS_PER_CONTEXT_TOKEN,
4
5
  CONTEXT_COMPACT_CHARS,
5
6
  CONTEXT_KEEP_RECENT_CHARS,
6
7
  CONTEXT_KEEP_RECENT_MESSAGES,
@@ -26,13 +27,11 @@ import {
26
27
  allocatePort,
27
28
  allocatePortRange,
28
29
  applyCompaction,
30
+ applyForwardOccupancy,
29
31
  applyPromptCacheTtlEnv,
30
32
  applyThreadIntoMain,
31
33
  armSchedules,
32
34
  assembleHomeBoard,
33
- attachmentFromAbsolutePath,
34
- attachmentsFromBuffers,
35
- attachmentsFromWorktreePaths,
36
35
  boardPinIdentity,
37
36
  buildForkTranscriptAttachment,
38
37
  buildReviewRequestAttachment,
@@ -64,6 +63,7 @@ import {
64
63
  ensureReviewRequestFile,
65
64
  ensureReviewSkillFile,
66
65
  estimateMessageChars,
66
+ estimateOccupancyTokens,
67
67
  estimateThreadChars,
68
68
  expandComposerPrompt,
69
69
  extractiveSummary,
@@ -91,6 +91,7 @@ import {
91
91
  formatUiReminder,
92
92
  formatWorktreeDirective,
93
93
  formatWorktreeReminder,
94
+ forwardContextUsage,
94
95
  getDefaultRunScript,
95
96
  getDiff,
96
97
  getDiffSummary,
@@ -111,7 +112,6 @@ import {
111
112
  isCowboyThread,
112
113
  isDesktopHostAlive,
113
114
  isHomeBoardThread,
114
- isImageFilePath,
115
115
  isPidAlive,
116
116
  isPrimaryCheckoutThread,
117
117
  isSlackExternalReplyPrompt,
@@ -170,14 +170,13 @@ import {
170
170
  splitForCompaction,
171
171
  stackAgentDefaultsFrom,
172
172
  stackIdFrom,
173
- stageAbsolutePathsAsAttachments,
174
- stageBuffersAsAttachments,
175
173
  startDevServer,
176
174
  startOrchestration,
177
175
  summarizeConversation,
178
176
  syncBoardPins,
179
177
  takenTeamSlugsForChatTab,
180
178
  thisProcessShouldDrainAgentQueues,
179
+ threadHasCompactedContext,
181
180
  threadsSharingWorktree,
182
181
  updateSchedule,
183
182
  upsertSlackWorkspace,
@@ -187,7 +186,7 @@ import {
187
186
  worktreeCleanupSettings,
188
187
  wrapReviewSkillMarkdown,
189
188
  writeWorktreeFile
190
- } from "./chunk-XIKEUCNC.js";
189
+ } from "./chunk-ZCLHAOFR.js";
191
190
  import {
192
191
  BRIGHTSY_MCP_ALLOWED_TOOLS,
193
192
  CLAUDE_MODEL_CATALOG,
@@ -263,10 +262,11 @@ import {
263
262
  toolDetail,
264
263
  toolFilePath,
265
264
  totalTokens,
265
+ visibleToolRowDetail,
266
266
  withEventParentId,
267
267
  withEventsParentId,
268
268
  writeInjectedMcpConfig
269
- } from "./chunk-N62K3KXX.js";
269
+ } from "./chunk-CDJISVKN.js";
270
270
  import {
271
271
  brightsyMcpServerName,
272
272
  connectBrightsyTeam,
@@ -291,7 +291,7 @@ import {
291
291
  listWorkspaces,
292
292
  removeWorkspace,
293
293
  syncWorkspacesFromThreads
294
- } from "./chunk-LOKXPQ4U.js";
294
+ } from "./chunk-SSBM4GZX.js";
295
295
  import {
296
296
  CLOUD_COORDINATOR_BUSY_REPLY,
297
297
  CLOUD_COORDINATOR_STOPPED_REPLY,
@@ -301,6 +301,9 @@ import {
301
301
  ORCHESTRATOR_AGENT_KINDS,
302
302
  SIDEBOARD_FORCE_STOP,
303
303
  assertOrchestratorCapableAgent,
304
+ attachmentFromAbsolutePath,
305
+ attachmentsFromBuffers,
306
+ attachmentsFromWorktreePaths,
304
307
  coerceOrchestratorAgent,
305
308
  createGlobalChat,
306
309
  ensureCloudCoordinator,
@@ -310,6 +313,7 @@ import {
310
313
  isCloudCoordinatorThread,
311
314
  isGlobalRepoPath,
312
315
  isGlobalThread,
316
+ isImageFilePath,
313
317
  isOrchestratorCapableAgent,
314
318
  isOrchestratorThread,
315
319
  isSlackCoordinatorThread,
@@ -317,9 +321,12 @@ import {
317
321
  orchestrationTitleNeedsSoccerNickname,
318
322
  orchestratorSessionPoisonedByBuiltins,
319
323
  parseForceStopMessage,
324
+ persistPendingFileAttachments,
320
325
  slackCoordinatorSourceRef,
326
+ stageAbsolutePathsAsAttachments,
327
+ stageBuffersAsAttachments,
321
328
  takenTeamSlugsForOrchestration
322
- } from "./chunk-XUEI4GCF.js";
329
+ } from "./chunk-E2RE7P2S.js";
323
330
  import {
324
331
  COORDINATOR_TOOL_PLAYBOOK,
325
332
  SLACK_REPLY_FORMATTING,
@@ -328,7 +335,7 @@ import {
328
335
  enrichWorkspacesWithGithub,
329
336
  ensureGlobalCoordinatorCwd,
330
337
  formatWorkspaceInventory
331
- } from "./chunk-57GIFU3X.js";
338
+ } from "./chunk-7SYFWPOZ.js";
332
339
  import {
333
340
  ABLETIME_MCP_PATH,
334
341
  DEFAULT_ABLETIME_HOST,
@@ -465,7 +472,7 @@ import {
465
472
  worktreeDisplayLabel,
466
473
  worktreeDisplayLabelForGroup,
467
474
  worktreeNameFromPath
468
- } from "./chunk-HQQNLDVC.js";
475
+ } from "./chunk-DKXZCIB2.js";
469
476
  import {
470
477
  ATTACHMENTS_DIR,
471
478
  LEGACY_ATTACHMENTS_DIR,
@@ -562,7 +569,7 @@ import {
562
569
  updateThread,
563
570
  withThreadLock,
564
571
  writeThread
565
- } from "./chunk-PM3C2J6K.js";
572
+ } from "./chunk-TUGKX5BD.js";
566
573
  import {
567
574
  THINKING_EFFORTS,
568
575
  isThinkingEffort,
@@ -1550,8 +1557,12 @@ function latestPendingPlanQuestions(input) {
1550
1557
  if (last?.role === "agent") return extractPendingPlanQuestions(last.parts);
1551
1558
  return null;
1552
1559
  }
1560
+ var PLAN_QUESTION_ANSWERS_PREFIX = "Answers to your questions:";
1561
+ function isPlanQuestionAnswersMessage(text5) {
1562
+ return text5.startsWith(PLAN_QUESTION_ANSWERS_PREFIX);
1563
+ }
1553
1564
  function formatPlanQuestionAnswers(questions, answers) {
1554
- const lines = ["Answers to your questions:"];
1565
+ const lines = [PLAN_QUESTION_ANSWERS_PREFIX, ""];
1555
1566
  for (let i = 0; i < questions.length; i++) {
1556
1567
  const q = questions[i];
1557
1568
  const a = answers.find((x) => x.questionIndex === i);
@@ -1560,7 +1571,7 @@ function formatPlanQuestionAnswers(questions, answers) {
1560
1571
  if (a?.selected.length) parts.push(a.selected.join(", "));
1561
1572
  if (a?.other?.trim()) parts.push(a.other.trim());
1562
1573
  const body = parts.length ? parts.join(" \xB7 ") : "(no answer)";
1563
- lines.push(`${i + 1}. ${header}${q.question}`);
1574
+ lines.push(`${i + 1}. ${header}${q.question} `);
1564
1575
  lines.push(` \u2192 ${body}`);
1565
1576
  }
1566
1577
  return lines.join("\n");
@@ -1611,6 +1622,36 @@ var MCP_WAIT_QUEUED_HINT = "Child is queued waiting for a concurrency slot \u201
1611
1622
  function mcpWaitStillRunningHint(status) {
1612
1623
  return status === "queued" ? MCP_WAIT_QUEUED_HINT : MCP_WAIT_STILL_RUNNING_HINT;
1613
1624
  }
1625
+ var MCP_WAIT_STOPPED_HINT = "Child was stopped before the turn finished. Do not treat this as success. send_to_thread to resume, or tell the user.";
1626
+ var MCP_WAIT_BROKEN_HINT = "Child worktree is broken (missing on disk). Tell the user \u2014 do not treat this as success.";
1627
+ var MCP_WAIT_ERROR_HINT = "Child turn failed. lastError/text is the failure \u2014 switch agent, tell the user, or retry. Do not treat empty text as success.";
1628
+ function mcpWaitFinishedHint(status) {
1629
+ if (status === "stopped") return MCP_WAIT_STOPPED_HINT;
1630
+ if (status === "broken") return MCP_WAIT_BROKEN_HINT;
1631
+ if (status === "error") return MCP_WAIT_ERROR_HINT;
1632
+ return void 0;
1633
+ }
1634
+
1635
+ // src/mcp/thread-visibility.ts
1636
+ function lastMessagePreview(messages, max = 160) {
1637
+ if (!messages?.length) return null;
1638
+ for (let i = messages.length - 1; i >= 0; i--) {
1639
+ const text5 = messages[i]?.text?.trim();
1640
+ if (!text5) continue;
1641
+ const flat = text5.replace(/\s+/g, " ");
1642
+ return flat.length > max ? `${flat.slice(0, max)}\u2026` : flat;
1643
+ }
1644
+ return null;
1645
+ }
1646
+ function childThreadRefs(parentId, threads) {
1647
+ return threads.filter((t) => t.parentThreadId === parentId).map((t) => ({
1648
+ id: t.id,
1649
+ title: t.title,
1650
+ status: t.status,
1651
+ agent: t.agent,
1652
+ lastText: lastMessagePreview(t.messages, 120)
1653
+ }));
1654
+ }
1614
1655
 
1615
1656
  // src/mcp/slack-tools.ts
1616
1657
  import { z } from "zod";
@@ -2925,15 +2966,19 @@ async function startMcpServer() {
2925
2966
  );
2926
2967
  server.tool(
2927
2968
  "list_threads",
2928
- "List Sideboard threads across all workspaces (one summary line each \u2014 token-frugal). Each line ends with sideboard://thread/<id> \u2014 use that URL in markdown links so the UI can open the chat.",
2969
+ "List Sideboard threads across all workspaces (one summary line each \u2014 token-frugal). Includes parent id, last message preview, and live progress so you can see worktree children. Each line ends with sideboard://thread/<id> \u2014 use that URL in markdown links so the UI can open the chat.",
2929
2970
  {},
2930
2971
  async () => {
2931
2972
  const threads = orch.getThreads(true);
2932
2973
  const lines = threads.map((t) => {
2933
2974
  const repo = t.repoPath === GLOBAL_WORKSPACE_ID ? "Orchestration" : basename(t.repoPath) || t.repoPath;
2934
2975
  const live = t.status === "running" || t.status === "queued" ? readTurnLive(t.id) : null;
2976
+ const parent = t.parentThreadId ? ` parent:${t.parentThreadId.slice(0, 8)}` : "";
2977
+ const preview = lastMessagePreview(t.messages, 80);
2978
+ const previewBit = preview ? ` ${preview}` : "";
2979
+ const err = t.lastError ? ` error:${t.lastError.replace(/\s+/g, " ").slice(0, 60)}` : "";
2935
2980
  const progress = live?.summary ? ` ${live.summary}` : "";
2936
- return `${t.id.slice(0, 8)} ${t.status.padEnd(9)} ${t.agent.padEnd(8)} ${repo} ${t.sourceType}:${t.sourceRef} ${t.title} sideboard://thread/${t.id}${t.devPort ? ` http://localhost:${t.devPort}` : ""}${progress}`;
2981
+ return `${t.id.slice(0, 8)} ${t.status.padEnd(9)} ${t.agent.padEnd(8)} ${repo} ${t.sourceType}:${t.sourceRef} ${t.title}${parent}${previewBit}${err} sideboard://thread/${t.id}${t.devPort ? ` http://localhost:${t.devPort}` : ""}${progress}`;
2937
2982
  });
2938
2983
  return {
2939
2984
  content: [{ type: "text", text: lines.join("\n") || "(no threads)" }]
@@ -2987,7 +3032,7 @@ async function startMcpServer() {
2987
3032
  );
2988
3033
  server.tool(
2989
3034
  "get_thread",
2990
- "Get a compact thread summary by id/ref. While running, includes progress (last tool/thinking) and lastActivityAt. Includes usage (thread billed token + costUsd totals when providers reported cost) and lastTurnUsage.",
3035
+ "Get a compact thread summary by id/ref. Includes last message preview, parentThreadId, and child worktree threads (status + lastText). While running, includes progress (last tool/thinking) and lastActivityAt. Includes usage (thread billed token + costUsd totals when providers reported cost) and lastTurnUsage.",
2991
3036
  { ref: z5.string() },
2992
3037
  async ({ ref }) => {
2993
3038
  const t = orch.getThread(ref);
@@ -3006,8 +3051,11 @@ async function startMcpServer() {
3006
3051
  branchName: t.branchName,
3007
3052
  worktreePath: t.worktreePath,
3008
3053
  sessionId: t.sessionId,
3054
+ parentThreadId: t.parentThreadId,
3055
+ children: childThreadRefs(t.id, orch.getThreads(false)),
3009
3056
  queueLength: t.queue.length,
3010
3057
  messageCount: t.messages.length,
3058
+ lastText: lastMessagePreview(t.messages, 240),
3011
3059
  devPort: t.devPort,
3012
3060
  prUrl: t.prUrl,
3013
3061
  lastError: t.lastError ?? null,
@@ -3338,7 +3386,7 @@ async function startMcpServer() {
3338
3386
  );
3339
3387
  server.tool(
3340
3388
  "send_to_thread",
3341
- 'Queue a prompt on a worktree thread chat (runs under concurrency cap). Use after create_thread to start or continue a conversation. For commit/push/PR, prefer ask_git (canonical desktop-button phrases). Send "Merge PR." / ask_git merge only when the user explicitly asked to merge. Set force_stop=true to interrupt an in-flight/queued turn (kill + clear queue) before queueing this prompt \u2014 use when the thread is mid-turn or has stale queued prompts you need to replace.',
3389
+ 'Queue a prompt on a worktree thread chat (runs under concurrency cap). Use after create_thread to start or continue a conversation. For commit/push/PR, prefer ask_git (canonical desktop-button phrases). Send "Merge PR." / ask_git merge only when the user explicitly asked to merge. force_stop=true kills the in-flight turn and clears the queue before this prompt \u2014 only when the current request is wrong and must be replaced. Do not force_stop to check in, resume after a halt notice, or because wait_for_turn returned stillRunning; that stops the child mid-thought. Call wait_for_turn again instead.',
3342
3390
  {
3343
3391
  ref: z5.string(),
3344
3392
  prompt: z5.string(),
@@ -3348,7 +3396,7 @@ async function startMcpServer() {
3348
3396
  if (force_stop) {
3349
3397
  const existing = orch.getThread(ref);
3350
3398
  if (existing) {
3351
- orch.stop(ref, { clearQueue: true });
3399
+ orch.stop(ref, { clearQueue: true, notifyParent: false });
3352
3400
  }
3353
3401
  }
3354
3402
  const thread = await orch.send(ref, prompt);
@@ -3369,7 +3417,7 @@ async function startMcpServer() {
3369
3417
  );
3370
3418
  server.tool(
3371
3419
  "wait_for_turn",
3372
- "Wait until the thread finishes its current/queued turn, or return early with a live progress snapshot. MCP clients often kill tools around 60s, so this returns within 45s even while the child is still working. If stillRunning is true, progress is tools/thinking (or \u201Cqueued, waiting for a concurrency slot\u201D if it has not started). Call wait_for_turn again. Do not send a check-in prompt, force_stop, or assume a hang. On status error, lastError/text is the failure. When finished, usage is the last agent turn\u2019s tokens + costUsd (when the provider reported cost).",
3420
+ "Wait until the thread finishes its current/queued turn, or return early with a live progress snapshot. MCP clients often kill tools around 60s, so this returns within 45s even while the child is still working. If stillRunning is true, progress is tools/thinking (or \u201Cqueued, waiting for a concurrency slot\u201D if it has not started). Call wait_for_turn again. Do not send a check-in prompt, force_stop, or assume a hang. On status error, lastError/text is the failure. On status stopped or broken, the child did not finish \u2014 resume with send_to_thread or tell the user; do not treat that as success. When finished, usage is the last agent turn\u2019s tokens + costUsd (when the provider reported cost).",
3373
3421
  {
3374
3422
  ref: z5.string(),
3375
3423
  timeoutMs: z5.number().optional()
@@ -3391,7 +3439,8 @@ async function startMcpServer() {
3391
3439
  stillRunning: result.stillRunning,
3392
3440
  progress: result.progress,
3393
3441
  lastActivityAt: result.lastActivityAt,
3394
- hint: result.stillRunning ? mcpWaitStillRunningHint(result.status) : void 0
3442
+ hint: result.stillRunning ? mcpWaitStillRunningHint(result.status) : mcpWaitFinishedHint(result.status),
3443
+ incomplete: !result.stillRunning && Boolean(mcpWaitFinishedHint(result.status))
3395
3444
  })
3396
3445
  }
3397
3446
  ]
@@ -3410,7 +3459,8 @@ async function startMcpServer() {
3410
3459
  type: "text",
3411
3460
  text: JSON.stringify({
3412
3461
  ...result,
3413
- hint: result.stillRunning ? mcpWaitStillRunningHint(result.status) : void 0
3462
+ hint: result.stillRunning ? mcpWaitStillRunningHint(result.status) : mcpWaitFinishedHint(result.status),
3463
+ incomplete: !result.stillRunning && Boolean(mcpWaitFinishedHint(result.status))
3414
3464
  })
3415
3465
  }
3416
3466
  ]
@@ -3434,7 +3484,7 @@ async function startMcpServer() {
3434
3484
  }
3435
3485
  const clearQueue = force !== false;
3436
3486
  const hadQueued = t.queue.length > 0;
3437
- const stopped = orch.stop(ref, { clearQueue });
3487
+ const stopped = orch.stop(ref, { clearQueue, notifyParent: false });
3438
3488
  return {
3439
3489
  content: [
3440
3490
  {
@@ -6286,6 +6336,7 @@ export {
6286
6336
  BAKED_SLACK_RELAY_URL,
6287
6337
  BRIGHTSY_MCP_ALLOWED_TOOLS,
6288
6338
  BrightsySideboardApi,
6339
+ CHARS_PER_CONTEXT_TOKEN,
6289
6340
  CLAUDE_MODEL_CATALOG,
6290
6341
  CLOUD_COORDINATOR_BUSY_REPLY,
6291
6342
  CLOUD_COORDINATOR_STOPPED_REPLY,
@@ -6321,6 +6372,7 @@ export {
6321
6372
  PLAN_FILE_NAME,
6322
6373
  PLAN_FILE_REL,
6323
6374
  PLAN_MODE_INSTRUCTION,
6375
+ PLAN_QUESTION_ANSWERS_PREFIX,
6324
6376
  REPO_REVIEW_NAME,
6325
6377
  REPO_REVIEW_PATH,
6326
6378
  REVIEW_REQUEST_NAME,
@@ -6367,6 +6419,7 @@ export {
6367
6419
  applyAgentRunnerHeapEnv,
6368
6420
  applyAppEnvironment,
6369
6421
  applyCompaction,
6422
+ applyForwardOccupancy,
6370
6423
  applyGithubGitAuthEnv,
6371
6424
  applyPromptCacheTtlEnv,
6372
6425
  applyThreadIntoMain,
@@ -6484,6 +6537,7 @@ export {
6484
6537
  ensureSlackDeviceIdentity,
6485
6538
  ensureWorkspace,
6486
6539
  estimateMessageChars,
6540
+ estimateOccupancyTokens,
6487
6541
  estimateThreadChars,
6488
6542
  expandComposerPrompt,
6489
6543
  extractGhErrorDetail,
@@ -6531,6 +6585,7 @@ export {
6531
6585
  formatWorkspaceInventory,
6532
6586
  formatWorktreeDirective,
6533
6587
  formatWorktreeReminder,
6588
+ forwardContextUsage,
6534
6589
  fromInclusiveInputUsage,
6535
6590
  getAbleTimeAccessToken,
6536
6591
  getAbleTimeHost,
@@ -6620,6 +6675,7 @@ export {
6620
6675
  isOrchestratorThread,
6621
6676
  isPidAlive,
6622
6677
  isPlaceholderBranch,
6678
+ isPlanQuestionAnswersMessage,
6623
6679
  isPollWrapperToolName,
6624
6680
  isPrNotMergeableError,
6625
6681
  isPresentPlanToolName,
@@ -6730,6 +6786,7 @@ export {
6730
6786
  pastedTextStats,
6731
6787
  pendingSlackExternalReplies,
6732
6788
  permissionMode,
6789
+ persistPendingFileAttachments,
6733
6790
  persistVaultKeyInKeychain,
6734
6791
  planFileAbs,
6735
6792
  planQuestionsSignature,
@@ -6870,6 +6927,7 @@ export {
6870
6927
  thisProcessShouldDrainAgentQueues,
6871
6928
  threadDisplayLabel,
6872
6929
  threadFilePath,
6930
+ threadHasCompactedContext,
6873
6931
  threadLivePath,
6874
6932
  threadLockPath,
6875
6933
  threadRequestsBrightsyMcp,
@@ -6899,6 +6957,7 @@ export {
6899
6957
  userCursorMcpConfigPath,
6900
6958
  validateLinearApiKey,
6901
6959
  verifyAbleTimeConnection,
6960
+ visibleToolRowDetail,
6902
6961
  waitForPidExit,
6903
6962
  warmGithubAgentAuth,
6904
6963
  withAgentInstructions,