@sideboard-ai/core 0.1.303 → 0.1.305

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 (84) hide show
  1. package/dist/{abletime-APP3DZ4P.js → abletime-SJUVZVRU.js} +6 -6
  2. package/dist/{abletime-RYDAQ3FE.js → abletime-T5YSJLNZ.js} +6 -6
  3. package/dist/{abletime-oauth-ZURGXSY6.js → abletime-oauth-2TOOZ2FN.js} +5 -5
  4. package/dist/{abletime-oauth-KTERKARA.js → abletime-oauth-73TFJME4.js} +5 -5
  5. package/dist/{abletime-rest-4TVIWLZK.js → abletime-rest-5TDRIFEV.js} +5 -5
  6. package/dist/{abletime-rest-EUB6RW7K.js → abletime-rest-PNUGH2FS.js} +5 -5
  7. package/dist/agents/claude-runner.js +2 -2
  8. package/dist/agents/cursor-runner.js +5 -5
  9. package/dist/{agents-3GN4E2X3.js → agents-IWNQOQOU.js} +12 -12
  10. package/dist/{agents-XLHFVC64.js → agents-PGU5WVSO.js} +10 -10
  11. package/dist/{app-settings-2IH42VA5.js → app-settings-CC65VPBL.js} +3 -3
  12. package/dist/{app-settings-3OQWRKOK.js → app-settings-DZ5AY7N5.js} +3 -3
  13. package/dist/{caffeinate-hold-7JM5H5P3.js → caffeinate-hold-H7TTUDGM.js} +2 -2
  14. package/dist/{caffeinate-hold-DYJGWK6Y.js → caffeinate-hold-ZNUEZGHB.js} +2 -2
  15. package/dist/{chunk-545DY7CQ.js → chunk-33HIBNSF.js} +106 -64
  16. package/dist/{chunk-FA3V56KF.js → chunk-3UDRWMIM.js} +2 -2
  17. package/dist/{chunk-7IAMHN2N.js → chunk-42JGPPVS.js} +1 -1
  18. package/dist/{chunk-BRFDPV7Z.js → chunk-5QX2NYXL.js} +4 -4
  19. package/dist/{chunk-DW6NNYUJ.js → chunk-5SFA27CF.js} +61 -8
  20. package/dist/{chunk-XCXUVX7I.js → chunk-62ESCTJ4.js} +1 -1
  21. package/dist/{chunk-SSETL5EX.js → chunk-6424BACS.js} +2 -2
  22. package/dist/{chunk-RSATPXU4.js → chunk-A2YXQC65.js} +264 -2
  23. package/dist/{chunk-GEFH4QFX.js → chunk-BIPXOHZI.js} +3 -3
  24. package/dist/{chunk-HSF2RQSQ.js → chunk-CFTOKVQN.js} +5 -5
  25. package/dist/{chunk-3D3GGL6X.js → chunk-CW4FIIDE.js} +3 -3
  26. package/dist/{chunk-5DZUWGKV.js → chunk-DC3VZXMA.js} +1 -1
  27. package/dist/{chunk-5MVOZLN7.js → chunk-DLGGLV2M.js} +3 -3
  28. package/dist/{chunk-WZCPZVUC.js → chunk-EGTCXNQM.js} +3 -3
  29. package/dist/{chunk-3TZRSKFJ.js → chunk-EZYZGDWU.js} +422 -175
  30. package/dist/{chunk-7AYOOG77.js → chunk-G2L3CR3A.js} +471 -107
  31. package/dist/{chunk-EHT2DRT4.js → chunk-H4UEFJRI.js} +4 -0
  32. package/dist/{chunk-P2GHFJOB.js → chunk-HG25AYBV.js} +2 -2
  33. package/dist/{chunk-GS6O65Q2.js → chunk-I34DCC4L.js} +104 -62
  34. package/dist/{chunk-UN5Q7POQ.js → chunk-J2LNLI4S.js} +1 -1
  35. package/dist/{chunk-MOP5L5QZ.js → chunk-JARCAPKL.js} +3 -3
  36. package/dist/{chunk-FAXOEKQR.js → chunk-JWW66PO3.js} +5 -5
  37. package/dist/{chunk-3HO2OY5T.js → chunk-KI45T4DI.js} +1 -1
  38. package/dist/{chunk-NOT4SEAM.js → chunk-LAWLUOWQ.js} +1 -1
  39. package/dist/{chunk-UWQ6UCIB.js → chunk-LG6RJBIY.js} +1 -1
  40. package/dist/{chunk-IOY2LF3Y.js → chunk-MMVMQ34G.js} +1 -1
  41. package/dist/{chunk-LZVWKJXY.js → chunk-OLSLE3LO.js} +3 -3
  42. package/dist/{chunk-RAGDMEIB.js → chunk-OVNIP265.js} +59 -8
  43. package/dist/{chunk-BU6HH5VA.js → chunk-PHMFAU35.js} +66 -2
  44. package/dist/{chunk-ISEYRGMP.js → chunk-RU6DTCCV.js} +2 -2
  45. package/dist/{chunk-R3R3ZDFC.js → chunk-SZ3XS2WM.js} +2 -2
  46. package/dist/{chunk-B42H6GJR.js → chunk-U4WACWBC.js} +3 -3
  47. package/dist/{chunk-VGNLMGBK.js → chunk-VEVFHO6K.js} +5 -5
  48. package/dist/{chunk-4RZRHTSZ.js → chunk-WMZIANPV.js} +1 -1
  49. package/dist/{chunk-H5XL4KUS.js → chunk-WOU343SI.js} +4 -0
  50. package/dist/{chunk-QDDTVIWE.js → chunk-WRZRX4Q7.js} +2 -2
  51. package/dist/{chunk-YCDHLK2Z.js → chunk-X3FSWWW2.js} +4 -4
  52. package/dist/{chunk-QDA6NXRA.js → chunk-YDUHLWI5.js} +1 -1
  53. package/dist/{chunk-J54UPHXZ.js → chunk-YJBUYGPN.js} +1 -1
  54. package/dist/{conductor-ATST6OMC.js → conductor-YBXURAUL.js} +10 -8
  55. package/dist/{conductor-2AVFGSQJ.js → conductor-ZFRXTVGP.js} +10 -8
  56. package/dist/{connected-teams-BJ6PMIST.js → connected-teams-BBNYTR3I.js} +2 -2
  57. package/dist/{connected-teams-AB7ZHJVO.js → connected-teams-WLWIVYGD.js} +2 -2
  58. package/dist/{coordinator-prompt-TIAI6A47.js → coordinator-prompt-GZCWQAAV.js} +7 -7
  59. package/dist/{coordinator-prompt-CQPUNMRX.js → coordinator-prompt-YAZRQ4BI.js} +7 -7
  60. package/dist/{cursor-recover-A6V5UVFT.js → cursor-recover-OWPQUHFH.js} +2 -2
  61. package/dist/{cursor-recover-MB3T2K5T.js → cursor-recover-TEBFKAZ4.js} +2 -2
  62. package/dist/{global-workspace-7YABMLQG.js → global-workspace-BZAVBOH3.js} +7 -7
  63. package/dist/{global-workspace-UZJUHGQP.js → global-workspace-H6X32IJZ.js} +7 -7
  64. package/dist/index.cjs +13486 -12609
  65. package/dist/index.d.cts +94 -14
  66. package/dist/index.d.ts +94 -14
  67. package/dist/index.js +11807 -11663
  68. package/dist/{managed-accounts-2AK5RIAF.js → managed-accounts-JJTAKHMG.js} +2 -2
  69. package/dist/{managed-accounts-46A4KRUE.js → managed-accounts-PITLFLKU.js} +2 -2
  70. package/dist/mcp/run-stdio.cjs +1037 -616
  71. package/dist/mcp/run-stdio.js +20 -20
  72. package/dist/{optional-cli-JQVNSMSU.js → optional-cli-QDIT57VD.js} +5 -5
  73. package/dist/{optional-cli-PZXDOVJJ.js → optional-cli-QY6V5S5N.js} +6 -6
  74. package/dist/{orchestrator-CZPRDLHV.js → orchestrator-IKKSYIQ3.js} +16 -16
  75. package/dist/{orchestrator-COX6QO2B.js → orchestrator-JGHYZDDB.js} +14 -14
  76. package/dist/{paths-HYT5WOOX.js → paths-HAAJNTTE.js} +1 -1
  77. package/dist/{paths-5JYXTAPC.js → paths-PHWEVXD5.js} +1 -1
  78. package/dist/{thread-store-PNX4HVLO.js → thread-store-HY22M5A7.js} +3 -3
  79. package/dist/{thread-store-VC4AIKN3.js → thread-store-XMUQDO5O.js} +3 -3
  80. package/dist/{workspaces-GZ7F5EJR.js → workspaces-AGOLRBYZ.js} +7 -7
  81. package/dist/{workspaces-6DJL4IST.js → workspaces-BQUDYTBX.js} +7 -7
  82. package/dist/{worktree-2BYVRYPJ.js → worktree-C5VI46RZ.js} +6 -6
  83. package/dist/{worktree-VXPOY2LE.js → worktree-FMK57ULT.js} +6 -6
  84. package/package.json +4 -1
@@ -282,6 +282,8 @@ function parseSettingsFile(path, source) {
282
282
  if (Array.isArray(copySection?.paths)) {
283
283
  filesToCopy.push(...copySection.paths.map(String));
284
284
  }
285
+ const worktree = data.worktree;
286
+ const sharedDirectories = Array.isArray(worktree?.shared_directories) ? worktree.shared_directories.map(String).map((item) => item.trim()).filter(Boolean) : [];
285
287
  const fileIncludeGlobs = [];
286
288
  if (Array.isArray(data.file_include_globs)) {
287
289
  fileIncludeGlobs.push(...data.file_include_globs.map(String));
@@ -333,6 +335,7 @@ function parseSettingsFile(path, source) {
333
335
  fileIncludeGlobs: fileIncludeGlobs.length ? fileIncludeGlobs : void 0,
334
336
  runScripts,
335
337
  worktreesRoot: worktreesRoot2,
338
+ sharedDirectories: sharedDirectories.length ? sharedDirectories : void 0,
336
339
  editor,
337
340
  prompts: hasPrompts ? prompts : void 0
338
341
  };
@@ -364,6 +367,7 @@ function mergeSettings(base, overlay) {
364
367
  fileIncludeGlobs: overlay.fileIncludeGlobs ?? base.fileIncludeGlobs,
365
368
  runScripts: mergeRunScripts(base.runScripts, overlay.runScripts),
366
369
  worktreesRoot: overlay.worktreesRoot ?? base.worktreesRoot,
370
+ sharedDirectories: overlay.sharedDirectories ?? base.sharedDirectories,
367
371
  editor: overlay.editor ?? base.editor,
368
372
  prompts: hasPrompts ? prompts : void 0
369
373
  };
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-F2PVRF3B.js";
4
4
  import {
5
5
  cursorSdkStoreDir
6
- } from "./chunk-UWQ6UCIB.js";
6
+ } from "./chunk-LG6RJBIY.js";
7
7
  import {
8
8
  normalizeThinkingEffort
9
9
  } from "./chunk-77WWLBCI.js";
@@ -11,7 +11,7 @@ import {
11
11
  threadFilePath,
12
12
  threadLockPath,
13
13
  threadsDir
14
- } from "./chunk-EHT2DRT4.js";
14
+ } from "./chunk-H4UEFJRI.js";
15
15
 
16
16
  // src/store/thread-store.ts
17
17
  import { randomUUID } from "crypto";
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  formatOptionalServicesDirectiveForTurn,
8
8
  formatOptionalServicesReminderForTurn
9
- } from "./chunk-XCXUVX7I.js";
9
+ } from "./chunk-62ESCTJ4.js";
10
10
  import {
11
11
  extractPresentedPlan,
12
12
  isPresentPlanToolName,
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-4GK32AYX.js";
16
16
  import {
17
17
  releaseCaffeinateHoldForThread
18
- } from "./chunk-5DZUWGKV.js";
18
+ } from "./chunk-DC3VZXMA.js";
19
19
  import {
20
20
  SIDEBOARD_THREAD_ID_ENV,
21
21
  adjustBrightsyTurnExit,
@@ -27,7 +27,7 @@ import {
27
27
  parseSessionQuotaResetAt,
28
28
  planModeTurnInstruction,
29
29
  resolveQuotaFallbackAgent
30
- } from "./chunk-3TZRSKFJ.js";
30
+ } from "./chunk-EZYZGDWU.js";
31
31
  import {
32
32
  REVIEW_TAB_TITLE,
33
33
  applyWorktreePkgCacheEnv,
@@ -55,7 +55,9 @@ import {
55
55
  listRunningDetachedJobs,
56
56
  maybeCompactContext,
57
57
  mergeWorktreeActiveRuns,
58
+ parsePlanQuestionsInput,
58
59
  planJobContinue,
60
+ planQuestionsSignature,
59
61
  requestReview,
60
62
  resolveWorktreeSetupLog,
61
63
  runArchiveScript,
@@ -66,7 +68,7 @@ import {
66
68
  worktreeDevProcessKey,
67
69
  worktreeRunProcessKey,
68
70
  worktreeSetupProcessKey
69
- } from "./chunk-DW6NNYUJ.js";
71
+ } from "./chunk-5SFA27CF.js";
70
72
  import {
71
73
  applyAgentEvent,
72
74
  clipAgentEventForPaint,
@@ -118,7 +120,7 @@ import {
118
120
  stageAbsolutePathsAsAttachments,
119
121
  stageBuffersAsAttachments,
120
122
  syncWorkspacesFromThreads
121
- } from "./chunk-YCDHLK2Z.js";
123
+ } from "./chunk-X3FSWWW2.js";
122
124
  import {
123
125
  addPrStackLayer,
124
126
  allocateTeamSlug,
@@ -160,7 +162,7 @@ import {
160
162
  resolveRepoRoot,
161
163
  switchWorktreeBranch,
162
164
  withRepoGitLock
163
- } from "./chunk-5MVOZLN7.js";
165
+ } from "./chunk-DLGGLV2M.js";
164
166
  import {
165
167
  clearStaleIndexLocks,
166
168
  enrichPathWithNpmGlobalBin,
@@ -201,7 +203,7 @@ import {
201
203
  usageOnLimit,
202
204
  withTurnScopedCost,
203
205
  writeViewerContext
204
- } from "./chunk-BU6HH5VA.js";
206
+ } from "./chunk-PHMFAU35.js";
205
207
  import {
206
208
  writePrivateFile
207
209
  } from "./chunk-NSTQ6QKD.js";
@@ -214,7 +216,7 @@ import {
214
216
  applyManagedAccountEnv,
215
217
  nextManagedAccount,
216
218
  resolveAccountForThread
217
- } from "./chunk-UN5Q7POQ.js";
219
+ } from "./chunk-J2LNLI4S.js";
218
220
  import {
219
221
  agentNicknameFromWorktreePath,
220
222
  appendMessage,
@@ -238,7 +240,7 @@ import {
238
240
  worktreeNameFromPath,
239
241
  worktreeSlugForTicket,
240
242
  writeThread
241
- } from "./chunk-FA3V56KF.js";
243
+ } from "./chunk-3UDRWMIM.js";
242
244
  import {
243
245
  annotateDevAccessRuns,
244
246
  appDataDir,
@@ -248,7 +250,7 @@ import {
248
250
  threadLivePath,
249
251
  threadsDir,
250
252
  worktreesRoot
251
- } from "./chunk-H5XL4KUS.js";
253
+ } from "./chunk-WOU343SI.js";
252
254
 
253
255
  // src/orchestrator/orchestrator.ts
254
256
  import { EventEmitter } from "events";
@@ -503,9 +505,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
503
505
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
504
506
  );
505
507
  }
506
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-UZJUHGQP.js");
508
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-H6X32IJZ.js");
507
509
  if (isGlobalThread2(thread)) {
508
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-TIAI6A47.js");
510
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-GZCWQAAV.js");
509
511
  ensureGlobalCoordinatorCwd2(
510
512
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
511
513
  );
@@ -1522,6 +1524,44 @@ function denyPendingToolPermissions(threadId) {
1522
1524
  if (last) clearPrompt(threadId, last.id);
1523
1525
  }
1524
1526
 
1527
+ // src/board/agent-block-view.ts
1528
+ function worktreeBoardStatus(group) {
1529
+ const order = ["running", "queued", "error", "broken"];
1530
+ for (const status of order) {
1531
+ if (group.some((t) => t.status === status)) return status;
1532
+ }
1533
+ return group[0]?.status ?? "idle";
1534
+ }
1535
+ function isDismissedAskUserBlock(block, dismissedQuestionSignature) {
1536
+ if (!block || block.source !== "ask_user") return false;
1537
+ const dismissed = dismissedQuestionSignature?.trim();
1538
+ if (!dismissed) return false;
1539
+ if (!block.questionSignature) return true;
1540
+ return block.questionSignature === dismissed;
1541
+ }
1542
+ function visibleAgentBlock(thread) {
1543
+ if (thread.status === "archived" || thread.status === "error" || thread.status === "broken") {
1544
+ return null;
1545
+ }
1546
+ const block = thread.agentBlock;
1547
+ if (!block?.reason?.trim()) return null;
1548
+ if (isDismissedAskUserBlock(block, thread.dismissedQuestionSignature)) return null;
1549
+ return block;
1550
+ }
1551
+ function worktreeAgentBlock(group) {
1552
+ let best = null;
1553
+ for (const thread of group) {
1554
+ const block = visibleAgentBlock(thread);
1555
+ if (!block) continue;
1556
+ if (!best || block.at > best.at) best = block;
1557
+ }
1558
+ return best;
1559
+ }
1560
+ function threadCardBlockFields(group) {
1561
+ const block = worktreeAgentBlock(group);
1562
+ return block ? { blockedReason: block.reason, blockedSource: block.source } : null;
1563
+ }
1564
+
1525
1565
  // src/threads/connected-orchestrator.ts
1526
1566
  function connectedOrchestrator(thread, find) {
1527
1567
  if (isOrchestratorThread(thread)) return null;
@@ -1661,7 +1701,10 @@ function decisionBlockFromParts(parts, planMode, at = (/* @__PURE__ */ new Date(
1661
1701
  if (last?.type === "tool" && isAskUserToolName(last.name)) {
1662
1702
  const pending = extractPendingPlanQuestions(parts);
1663
1703
  const reason = pending ? formatAskUserNotifyMessage(pending.questions) : "Waiting for an answer in that chat.";
1664
- return makeAgentBlock("ask_user", reason, at);
1704
+ return {
1705
+ ...makeAgentBlock("ask_user", reason, at),
1706
+ ...pending ? { questionSignature: pending.signature } : {}
1707
+ };
1665
1708
  }
1666
1709
  if (!planMode || last?.type !== "tool") return null;
1667
1710
  const exited = /exitplanmode/i.test(last.name ?? "");
@@ -1678,16 +1721,34 @@ function decisionBlockFromParts(parts, planMode, at = (/* @__PURE__ */ new Date(
1678
1721
  function agentBlockAfterTurn(input) {
1679
1722
  if (input.failed) return null;
1680
1723
  const decision = decisionBlockFromParts(input.parts, input.planMode);
1681
- if (decision) return decision;
1724
+ if (decision) {
1725
+ if (isDismissedAskUserBlock(decision, input.dismissedQuestionSignature)) {
1726
+ return input.existing?.source === "reported" ? input.existing : null;
1727
+ }
1728
+ return decision;
1729
+ }
1682
1730
  if (input.existing && input.existing.source !== "reported" && lastTopLevelTool(input.parts)) {
1683
1731
  return null;
1684
1732
  }
1733
+ if (isDismissedAskUserBlock(input.existing, input.dismissedQuestionSignature)) return null;
1685
1734
  return input.existing ?? null;
1686
1735
  }
1687
1736
  function clearAgentBlock(threadId) {
1688
1737
  const thread = readThread(threadId);
1689
- if (!thread?.agentBlock) return;
1690
- updateThread(threadId, { agentBlock: null });
1738
+ if (!thread?.agentBlock && !thread?.dismissedQuestionSignature) return;
1739
+ updateThread(threadId, { agentBlock: null, dismissedQuestionSignature: null });
1740
+ }
1741
+ function dismissAskUserQuestion(threadId, signature) {
1742
+ const thread = readThread(threadId);
1743
+ if (!thread || thread.status === "archived") return;
1744
+ const sig = signature.trim();
1745
+ if (!sig) return;
1746
+ const clearBlock = thread.agentBlock?.source === "ask_user";
1747
+ if (thread.dismissedQuestionSignature === sig && !clearBlock) return;
1748
+ updateThread(threadId, {
1749
+ dismissedQuestionSignature: sig,
1750
+ ...clearBlock ? { agentBlock: null } : {}
1751
+ });
1691
1752
  }
1692
1753
  function writeAgentBlock(threadId, block) {
1693
1754
  const thread = readThread(threadId);
@@ -1702,11 +1763,12 @@ function settleAgentBlock(threadId, parts, failed) {
1702
1763
  existing: thread.agentBlock,
1703
1764
  parts,
1704
1765
  planMode: Boolean(thread.planMode),
1705
- failed
1766
+ failed,
1767
+ dismissedQuestionSignature: thread.dismissedQuestionSignature
1706
1768
  });
1707
1769
  const prev = thread.agentBlock ?? null;
1708
1770
  if (prev === next) return;
1709
- if (prev && next && prev.source === next.source && prev.reason === next.reason && prev.at === next.at) {
1771
+ if (prev && next && prev.source === next.source && prev.reason === next.reason && prev.at === next.at && prev.questionSignature === next.questionSignature) {
1710
1772
  return;
1711
1773
  }
1712
1774
  updateThread(threadId, { agentBlock: next });
@@ -1724,8 +1786,13 @@ function agentBlockFields(thread) {
1724
1786
  }
1725
1787
  function stampAskUserBlock(resolveCaller, questions) {
1726
1788
  const asked = formatAskUserNotifyMessage(questions);
1789
+ const parsed = parsePlanQuestionsInput({ questions });
1790
+ const block = makeAgentBlock("ask_user", asked);
1727
1791
  try {
1728
- writeAgentBlock(resolveCaller().id, makeAgentBlock("ask_user", asked));
1792
+ writeAgentBlock(
1793
+ resolveCaller().id,
1794
+ parsed.length ? { ...block, questionSignature: planQuestionsSignature(parsed) } : block
1795
+ );
1729
1796
  } catch {
1730
1797
  }
1731
1798
  return asked;
@@ -1881,36 +1948,6 @@ async function requireAgent(agent, opts) {
1881
1948
  return status;
1882
1949
  }
1883
1950
 
1884
- // src/board/agent-block-view.ts
1885
- function worktreeBoardStatus(group) {
1886
- const order = ["running", "queued", "error", "broken"];
1887
- for (const status of order) {
1888
- if (group.some((t) => t.status === status)) return status;
1889
- }
1890
- return group[0]?.status ?? "idle";
1891
- }
1892
- function visibleAgentBlock(thread) {
1893
- if (thread.status === "archived" || thread.status === "error" || thread.status === "broken") {
1894
- return null;
1895
- }
1896
- const block = thread.agentBlock;
1897
- if (!block?.reason?.trim()) return null;
1898
- return block;
1899
- }
1900
- function worktreeAgentBlock(group) {
1901
- let best = null;
1902
- for (const thread of group) {
1903
- const block = visibleAgentBlock(thread);
1904
- if (!block) continue;
1905
- if (!best || block.at > best.at) best = block;
1906
- }
1907
- return best;
1908
- }
1909
- function threadCardBlockFields(group) {
1910
- const block = worktreeAgentBlock(group);
1911
- return block ? { blockedReason: block.reason, blockedSource: block.source } : null;
1912
- }
1913
-
1914
1951
  // src/board/pr-state.ts
1915
1952
  function isOpenPrState(prUrl, prState) {
1916
1953
  if (!prUrl?.trim()) return false;
@@ -2513,7 +2550,7 @@ async function createThread(input, _onSetupLine) {
2513
2550
  });
2514
2551
  await requireAgent(resolved.agent);
2515
2552
  if (input.cowboy) {
2516
- const { cowboyModeEnabled } = await import("./app-settings-2IH42VA5.js");
2553
+ const { cowboyModeEnabled } = await import("./app-settings-CC65VPBL.js");
2517
2554
  if (!cowboyModeEnabled()) {
2518
2555
  throw new Error(
2519
2556
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -2572,7 +2609,7 @@ async function createThread(input, _onSetupLine) {
2572
2609
  let sourceIsFork = false;
2573
2610
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
2574
2611
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
2575
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-APP3DZ4P.js");
2612
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-SJUVZVRU.js");
2576
2613
  const task = await ensureAbleTimeTask({
2577
2614
  title: title?.trim() || "Untitled work",
2578
2615
  description: input.prompt?.trim() || void 0
@@ -3444,7 +3481,7 @@ async function adoptThread(input) {
3444
3481
  messages: input.messages ?? []
3445
3482
  });
3446
3483
  writeThread(thread);
3447
- const { addWorkspace: addWorkspace2 } = await import("./workspaces-GZ7F5EJR.js");
3484
+ const { addWorkspace: addWorkspace2 } = await import("./workspaces-AGOLRBYZ.js");
3448
3485
  await addWorkspace2(repoPath);
3449
3486
  const { ensureWorktreeSideboardIgnored } = await import("./worktree-exclude-5N2KTYIT.js");
3450
3487
  await ensureWorktreeSideboardIgnored(input.worktreePath);
@@ -6329,7 +6366,7 @@ function formatScheduledPrompt(name, prompt) {
6329
6366
  ${prompt}`;
6330
6367
  }
6331
6368
  async function defaultDeps() {
6332
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-COX6QO2B.js");
6369
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-JGHYZDDB.js");
6333
6370
  const orch = getOrchestrator2();
6334
6371
  return {
6335
6372
  findThread: (id) => findThreadByRef(id),
@@ -6647,7 +6684,7 @@ var Orchestrator = class {
6647
6684
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
6648
6685
  });
6649
6686
  }
6650
- const { autoCleanupOrphansEnabled } = await import("./app-settings-2IH42VA5.js");
6687
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-CC65VPBL.js");
6651
6688
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
6652
6689
  await cleanupOrphanWorktrees({ repoPaths });
6653
6690
  }
@@ -7041,7 +7078,7 @@ var Orchestrator = class {
7041
7078
  }
7042
7079
  await setup;
7043
7080
  if (skipSetup) return;
7044
- const { autoRunAfterSetupEnabled } = await import("./app-settings-2IH42VA5.js");
7081
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-CC65VPBL.js");
7045
7082
  if (autoRunAfterSetupEnabled()) {
7046
7083
  try {
7047
7084
  await this.startDev(threadId);
@@ -7433,7 +7470,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
7433
7470
  }
7434
7471
  const isBrightsy = fresh.agent === "brightsy";
7435
7472
  const isOrchestration = isOrchestratorThread(fresh);
7436
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-2IH42VA5.js");
7473
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-CC65VPBL.js");
7437
7474
  const gitAuthMode = getGithubGitAuthMode();
7438
7475
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
7439
7476
  githubSlug: await withTimeout(
@@ -7588,7 +7625,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
7588
7625
  if (!this.stoppedTurns.has(threadId) && this.requireThread(threadId).agent === "cursor" && exitCode !== 0 && !assistantText && parts.length === 0) {
7589
7626
  const sessionId = result.sessionId || this.requireThread(threadId).sessionId || "";
7590
7627
  if (sessionId) {
7591
- const { recoverFinishedCursorRun } = await import("./cursor-recover-MB3T2K5T.js");
7628
+ const { recoverFinishedCursorRun } = await import("./cursor-recover-TEBFKAZ4.js");
7592
7629
  for (let i = 0; i < 8; i++) {
7593
7630
  const recovered = recoverFinishedCursorRun({
7594
7631
  agentId: sessionId,
@@ -8749,7 +8786,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8749
8786
  if (Object.keys(patch).length === 0) continue;
8750
8787
  updateThread(t.id, patch);
8751
8788
  }
8752
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-2IH42VA5.js");
8789
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-CC65VPBL.js");
8753
8790
  const latest = this.requireThread(thread.id);
8754
8791
  if (!shouldAutoArchiveOnPrMerge({
8755
8792
  previousPrState: prevState || null,
@@ -8958,6 +8995,11 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8958
8995
  if (!next) throw new Error("Title cannot be empty");
8959
8996
  return updateThread(thread.id, { title: next, userSetTitle: true });
8960
8997
  }
8998
+ dismissAskUser(threadRef, signature) {
8999
+ const thread = this.requireThread(threadRef);
9000
+ dismissAskUserQuestion(thread.id, signature);
9001
+ return this.requireThread(thread.id);
9002
+ }
8961
9003
  setWorkspaceTags(threadRef, tags) {
8962
9004
  return applyWorkspaceTags(threadRef, tags, "replace");
8963
9005
  }
@@ -9068,7 +9110,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
9068
9110
  await runArchiveScript(thread.repoPath, thread.worktreePath);
9069
9111
  } catch {
9070
9112
  }
9071
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-2IH42VA5.js");
9113
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-CC65VPBL.js");
9072
9114
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
9073
9115
  await removeWorktree(thread.repoPath, thread.worktreePath, {
9074
9116
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -9083,7 +9125,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
9083
9125
  throw new Error("Thread is not archived");
9084
9126
  }
9085
9127
  if (isGlobalThread(thread)) {
9086
- const { globalAgentCwd } = await import("./paths-HYT5WOOX.js");
9128
+ const { globalAgentCwd } = await import("./paths-HAAJNTTE.js");
9087
9129
  updateThread(thread.id, { worktreePath: globalAgentCwd() });
9088
9130
  const restored2 = setStatus(thread.id, "idle");
9089
9131
  this.emit({ type: "status_changed", threadId: restored2.id, status: restored2.status });
@@ -9204,7 +9246,7 @@ async function startOrchestration(opts) {
9204
9246
  sourceRef: "default",
9205
9247
  ...createOpts
9206
9248
  }).catch(async () => {
9207
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-VXPOY2LE.js");
9249
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-FMK57ULT.js");
9208
9250
  const repo = await resolveRepoRoot2(repoPath);
9209
9251
  const def = await resolveDefaultBranch2(repo);
9210
9252
  return orch.createThread({
@@ -9214,7 +9256,7 @@ async function startOrchestration(opts) {
9214
9256
  repoPath: repo
9215
9257
  });
9216
9258
  });
9217
- const { updateThread: upd } = await import("./thread-store-VC4AIKN3.js");
9259
+ const { updateThread: upd } = await import("./thread-store-XMUQDO5O.js");
9218
9260
  const updated = upd(thread.id, {
9219
9261
  sourceType: "orchestration",
9220
9262
  sourceRef: goal
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  appDataDir
5
- } from "./chunk-H5XL4KUS.js";
5
+ } from "./chunk-WOU343SI.js";
6
6
 
7
7
  // src/store/managed-accounts.ts
8
8
  import { existsSync, mkdirSync, copyFileSync } from "fs";
@@ -3,13 +3,13 @@
3
3
  import {
4
4
  abletimeRestUrl,
5
5
  textFromAbleTimeDoc
6
- } from "./chunk-SSETL5EX.js";
6
+ } from "./chunk-6424BACS.js";
7
7
  import {
8
8
  assertAbleTimeCredential,
9
9
  callAbleTimeTool,
10
10
  normalizeAbleTimeHost,
11
11
  rewriteAbleTimeError
12
- } from "./chunk-HSF2RQSQ.js";
12
+ } from "./chunk-CFTOKVQN.js";
13
13
  import {
14
14
  httpFetch
15
15
  } from "./chunk-2GPQZZLY.js";
@@ -22,7 +22,7 @@ import {
22
22
  getAbleTimeHost,
23
23
  isAbleTimeConnected,
24
24
  saveAbleTimeConnection
25
- } from "./chunk-BU6HH5VA.js";
25
+ } from "./chunk-PHMFAU35.js";
26
26
 
27
27
  // src/integrations/issue-attachments.ts
28
28
  import { existsSync, mkdirSync, writeFileSync } from "fs";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getAbleTimeHost,
6
6
  isAbleTimeConnected
7
- } from "./chunk-RSATPXU4.js";
7
+ } from "./chunk-A2YXQC65.js";
8
8
 
9
9
  // src/integrations/abletime-mcp.ts
10
10
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -153,7 +153,7 @@ function textsFromUnknown(value) {
153
153
  return "";
154
154
  }
155
155
  async function abletimeMcpRequest(method, params, opts) {
156
- const rawToken = opts?.token ?? await import("./abletime-oauth-KTERKARA.js").then((m) => m.ensureAbleTimeAccessToken());
156
+ const rawToken = opts?.token ?? await import("./abletime-oauth-73TFJME4.js").then((m) => m.ensureAbleTimeAccessToken());
157
157
  if (!rawToken?.trim()) {
158
158
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
159
159
  }
@@ -224,9 +224,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
224
224
  if (!opts?.token && !isAbleTimeConnected()) {
225
225
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
226
226
  }
227
- const rawToken = opts?.token ?? await import("./abletime-oauth-KTERKARA.js").then((m) => m.ensureAbleTimeAccessToken());
227
+ const rawToken = opts?.token ?? await import("./abletime-oauth-73TFJME4.js").then((m) => m.ensureAbleTimeAccessToken());
228
228
  if (rawToken && ableTimeUsesRest(rawToken)) {
229
- const { callAbleTimeRestTool } = await import("./abletime-rest-EUB6RW7K.js");
229
+ const { callAbleTimeRestTool } = await import("./abletime-rest-PNUGH2FS.js");
230
230
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
231
231
  }
232
232
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -242,7 +242,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
242
242
  return await call();
243
243
  }
244
244
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
245
- const { callAbleTimeRestTool } = await import("./abletime-rest-EUB6RW7K.js");
245
+ const { callAbleTimeRestTool } = await import("./abletime-rest-PNUGH2FS.js");
246
246
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
247
247
  }
248
248
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  appDataDir
3
- } from "./chunk-EHT2DRT4.js";
3
+ } from "./chunk-H4UEFJRI.js";
4
4
 
5
5
  // src/store/managed-accounts.ts
6
6
  import { existsSync, mkdirSync, copyFileSync } from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-JT7R45JB.js";
4
4
  import {
5
5
  appDataDir
6
- } from "./chunk-EHT2DRT4.js";
6
+ } from "./chunk-H4UEFJRI.js";
7
7
 
8
8
  // src/store/caffeinate-hold.ts
9
9
  import { spawn } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  appDataDir
3
- } from "./chunk-EHT2DRT4.js";
3
+ } from "./chunk-H4UEFJRI.js";
4
4
 
5
5
  // src/agents/cursor-store.ts
6
6
  import { join } from "path";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-4TR3HZFT.js";
13
13
  import {
14
14
  appDataDir
15
- } from "./chunk-EHT2DRT4.js";
15
+ } from "./chunk-H4UEFJRI.js";
16
16
 
17
17
  // src/http/system-ca.ts
18
18
  import { spawnSync } from "child_process";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  abletimeRestUrl,
3
3
  textFromAbleTimeDoc
4
- } from "./chunk-R3R3ZDFC.js";
4
+ } from "./chunk-SZ3XS2WM.js";
5
5
  import {
6
6
  assertAbleTimeCredential,
7
7
  callAbleTimeTool,
8
8
  normalizeAbleTimeHost,
9
9
  rewriteAbleTimeError
10
- } from "./chunk-FAXOEKQR.js";
10
+ } from "./chunk-JWW66PO3.js";
11
11
  import {
12
12
  httpFetch
13
13
  } from "./chunk-JAT3JFOS.js";
@@ -20,7 +20,7 @@ import {
20
20
  getAbleTimeHost,
21
21
  isAbleTimeConnected,
22
22
  saveAbleTimeConnection
23
- } from "./chunk-RSATPXU4.js";
23
+ } from "./chunk-A2YXQC65.js";
24
24
 
25
25
  // src/integrations/issue-attachments.ts
26
26
  import { existsSync, mkdirSync, writeFileSync } from "fs";