@sideboard-ai/core 0.1.303 → 0.1.304

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
@@ -14,7 +14,7 @@ import {
14
14
  parseSessionQuotaResetAt,
15
15
  planModeTurnInstruction,
16
16
  resolveQuotaFallbackAgent
17
- } from "./chunk-7AYOOG77.js";
17
+ } from "./chunk-G2L3CR3A.js";
18
18
  import {
19
19
  REVIEW_TAB_TITLE,
20
20
  applyWorktreePkgCacheEnv,
@@ -42,7 +42,9 @@ import {
42
42
  listRunningDetachedJobs,
43
43
  maybeCompactContext,
44
44
  mergeWorktreeActiveRuns,
45
+ parsePlanQuestionsInput,
45
46
  planJobContinue,
47
+ planQuestionsSignature,
46
48
  requestReview,
47
49
  resolveWorktreeSetupLog,
48
50
  runArchiveScript,
@@ -53,7 +55,7 @@ import {
53
55
  worktreeDevProcessKey,
54
56
  worktreeRunProcessKey,
55
57
  worktreeSetupProcessKey
56
- } from "./chunk-RAGDMEIB.js";
58
+ } from "./chunk-OVNIP265.js";
57
59
  import {
58
60
  applyAgentEvent,
59
61
  clipAgentEventForPaint,
@@ -75,7 +77,7 @@ import {
75
77
  import {
76
78
  formatOptionalServicesDirectiveForTurn,
77
79
  formatOptionalServicesReminderForTurn
78
- } from "./chunk-QDDTVIWE.js";
80
+ } from "./chunk-WRZRX4Q7.js";
79
81
  import {
80
82
  SLACK_REPLY_FORMATTING,
81
83
  addWorkspace,
@@ -100,7 +102,7 @@ import {
100
102
  stageAbsolutePathsAsAttachments,
101
103
  stageBuffersAsAttachments,
102
104
  syncWorkspacesFromThreads
103
- } from "./chunk-BRFDPV7Z.js";
105
+ } from "./chunk-5QX2NYXL.js";
104
106
  import {
105
107
  addPrStackLayer,
106
108
  allocateTeamSlug,
@@ -144,7 +146,7 @@ import {
144
146
  resolveRepoRoot,
145
147
  switchWorktreeBranch,
146
148
  withRepoGitLock
147
- } from "./chunk-GEFH4QFX.js";
149
+ } from "./chunk-BIPXOHZI.js";
148
150
  import {
149
151
  agentNicknameFromWorktreePath,
150
152
  appendMessage,
@@ -168,7 +170,7 @@ import {
168
170
  worktreeNameFromPath,
169
171
  worktreeSlugForTicket,
170
172
  writeThread
171
- } from "./chunk-P2GHFJOB.js";
173
+ } from "./chunk-HG25AYBV.js";
172
174
  import {
173
175
  mcpServerIdForPermission,
174
176
  mcpServerPermissionUpdate
@@ -179,7 +181,7 @@ import {
179
181
  import {
180
182
  applyAgentRunnerHeapEnv,
181
183
  packagedMcpDir
182
- } from "./chunk-IOY2LF3Y.js";
184
+ } from "./chunk-MMVMQ34G.js";
183
185
  import {
184
186
  fallbackTurnFailDetail,
185
187
  formatAgentErrorContinuePrompt,
@@ -235,7 +237,7 @@ import {
235
237
  usageOnLimit,
236
238
  withTurnScopedCost,
237
239
  writeViewerContext
238
- } from "./chunk-RSATPXU4.js";
240
+ } from "./chunk-A2YXQC65.js";
239
241
  import {
240
242
  examplePrefixedBranch,
241
243
  sanitizeGitBranchPrefix
@@ -245,10 +247,10 @@ import {
245
247
  applyManagedAccountEnv,
246
248
  nextManagedAccount,
247
249
  resolveAccountForThread
248
- } from "./chunk-3HO2OY5T.js";
250
+ } from "./chunk-KI45T4DI.js";
249
251
  import {
250
252
  releaseCaffeinateHoldForThread
251
- } from "./chunk-NOT4SEAM.js";
253
+ } from "./chunk-LAWLUOWQ.js";
252
254
  import {
253
255
  writePrivateFile
254
256
  } from "./chunk-JT7R45JB.js";
@@ -261,7 +263,7 @@ import {
261
263
  threadLivePath,
262
264
  threadsDir,
263
265
  worktreesRoot
264
- } from "./chunk-EHT2DRT4.js";
266
+ } from "./chunk-H4UEFJRI.js";
265
267
 
266
268
  // src/orchestrator/orchestrator.ts
267
269
  import { EventEmitter } from "events";
@@ -457,9 +459,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
457
459
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
458
460
  );
459
461
  }
460
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-7YABMLQG.js");
462
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-BZAVBOH3.js");
461
463
  if (isGlobalThread2(thread)) {
462
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-CQPUNMRX.js");
464
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-YAZRQ4BI.js");
463
465
  ensureGlobalCoordinatorCwd2(
464
466
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
465
467
  );
@@ -1619,6 +1621,44 @@ function denyPendingToolPermissions(threadId) {
1619
1621
  if (last) clearPrompt(threadId, last.id);
1620
1622
  }
1621
1623
 
1624
+ // src/board/agent-block-view.ts
1625
+ function worktreeBoardStatus(group) {
1626
+ const order = ["running", "queued", "error", "broken"];
1627
+ for (const status of order) {
1628
+ if (group.some((t) => t.status === status)) return status;
1629
+ }
1630
+ return group[0]?.status ?? "idle";
1631
+ }
1632
+ function isDismissedAskUserBlock(block, dismissedQuestionSignature) {
1633
+ if (!block || block.source !== "ask_user") return false;
1634
+ const dismissed = dismissedQuestionSignature?.trim();
1635
+ if (!dismissed) return false;
1636
+ if (!block.questionSignature) return true;
1637
+ return block.questionSignature === dismissed;
1638
+ }
1639
+ function visibleAgentBlock(thread) {
1640
+ if (thread.status === "archived" || thread.status === "error" || thread.status === "broken") {
1641
+ return null;
1642
+ }
1643
+ const block = thread.agentBlock;
1644
+ if (!block?.reason?.trim()) return null;
1645
+ if (isDismissedAskUserBlock(block, thread.dismissedQuestionSignature)) return null;
1646
+ return block;
1647
+ }
1648
+ function worktreeAgentBlock(group) {
1649
+ let best = null;
1650
+ for (const thread of group) {
1651
+ const block = visibleAgentBlock(thread);
1652
+ if (!block) continue;
1653
+ if (!best || block.at > best.at) best = block;
1654
+ }
1655
+ return best;
1656
+ }
1657
+ function threadCardBlockFields(group) {
1658
+ const block = worktreeAgentBlock(group);
1659
+ return block ? { blockedReason: block.reason, blockedSource: block.source } : null;
1660
+ }
1661
+
1622
1662
  // src/threads/connected-orchestrator.ts
1623
1663
  function connectedOrchestrator(thread, find) {
1624
1664
  if (isOrchestratorThread(thread)) return null;
@@ -1758,7 +1798,10 @@ function decisionBlockFromParts(parts, planMode, at = (/* @__PURE__ */ new Date(
1758
1798
  if (last?.type === "tool" && isAskUserToolName(last.name)) {
1759
1799
  const pending = extractPendingPlanQuestions(parts);
1760
1800
  const reason = pending ? formatAskUserNotifyMessage(pending.questions) : "Waiting for an answer in that chat.";
1761
- return makeAgentBlock("ask_user", reason, at);
1801
+ return {
1802
+ ...makeAgentBlock("ask_user", reason, at),
1803
+ ...pending ? { questionSignature: pending.signature } : {}
1804
+ };
1762
1805
  }
1763
1806
  if (!planMode || last?.type !== "tool") return null;
1764
1807
  const exited = /exitplanmode/i.test(last.name ?? "");
@@ -1775,16 +1818,34 @@ function decisionBlockFromParts(parts, planMode, at = (/* @__PURE__ */ new Date(
1775
1818
  function agentBlockAfterTurn(input) {
1776
1819
  if (input.failed) return null;
1777
1820
  const decision = decisionBlockFromParts(input.parts, input.planMode);
1778
- if (decision) return decision;
1821
+ if (decision) {
1822
+ if (isDismissedAskUserBlock(decision, input.dismissedQuestionSignature)) {
1823
+ return input.existing?.source === "reported" ? input.existing : null;
1824
+ }
1825
+ return decision;
1826
+ }
1779
1827
  if (input.existing && input.existing.source !== "reported" && lastTopLevelTool(input.parts)) {
1780
1828
  return null;
1781
1829
  }
1830
+ if (isDismissedAskUserBlock(input.existing, input.dismissedQuestionSignature)) return null;
1782
1831
  return input.existing ?? null;
1783
1832
  }
1784
1833
  function clearAgentBlock(threadId) {
1785
1834
  const thread = readThread(threadId);
1786
- if (!thread?.agentBlock) return;
1787
- updateThread(threadId, { agentBlock: null });
1835
+ if (!thread?.agentBlock && !thread?.dismissedQuestionSignature) return;
1836
+ updateThread(threadId, { agentBlock: null, dismissedQuestionSignature: null });
1837
+ }
1838
+ function dismissAskUserQuestion(threadId, signature) {
1839
+ const thread = readThread(threadId);
1840
+ if (!thread || thread.status === "archived") return;
1841
+ const sig = signature.trim();
1842
+ if (!sig) return;
1843
+ const clearBlock = thread.agentBlock?.source === "ask_user";
1844
+ if (thread.dismissedQuestionSignature === sig && !clearBlock) return;
1845
+ updateThread(threadId, {
1846
+ dismissedQuestionSignature: sig,
1847
+ ...clearBlock ? { agentBlock: null } : {}
1848
+ });
1788
1849
  }
1789
1850
  function writeAgentBlock(threadId, block) {
1790
1851
  const thread = readThread(threadId);
@@ -1799,11 +1860,12 @@ function settleAgentBlock(threadId, parts, failed) {
1799
1860
  existing: thread.agentBlock,
1800
1861
  parts,
1801
1862
  planMode: Boolean(thread.planMode),
1802
- failed
1863
+ failed,
1864
+ dismissedQuestionSignature: thread.dismissedQuestionSignature
1803
1865
  });
1804
1866
  const prev = thread.agentBlock ?? null;
1805
1867
  if (prev === next) return;
1806
- if (prev && next && prev.source === next.source && prev.reason === next.reason && prev.at === next.at) {
1868
+ if (prev && next && prev.source === next.source && prev.reason === next.reason && prev.at === next.at && prev.questionSignature === next.questionSignature) {
1807
1869
  return;
1808
1870
  }
1809
1871
  updateThread(threadId, { agentBlock: next });
@@ -1821,8 +1883,13 @@ function agentBlockFields(thread) {
1821
1883
  }
1822
1884
  function stampAskUserBlock(resolveCaller, questions) {
1823
1885
  const asked = formatAskUserNotifyMessage(questions);
1886
+ const parsed = parsePlanQuestionsInput({ questions });
1887
+ const block = makeAgentBlock("ask_user", asked);
1824
1888
  try {
1825
- writeAgentBlock(resolveCaller().id, makeAgentBlock("ask_user", asked));
1889
+ writeAgentBlock(
1890
+ resolveCaller().id,
1891
+ parsed.length ? { ...block, questionSignature: planQuestionsSignature(parsed) } : block
1892
+ );
1826
1893
  } catch {
1827
1894
  }
1828
1895
  return asked;
@@ -1983,36 +2050,6 @@ async function requireAgent(agent, opts) {
1983
2050
  return status;
1984
2051
  }
1985
2052
 
1986
- // src/board/agent-block-view.ts
1987
- function worktreeBoardStatus(group) {
1988
- const order = ["running", "queued", "error", "broken"];
1989
- for (const status of order) {
1990
- if (group.some((t) => t.status === status)) return status;
1991
- }
1992
- return group[0]?.status ?? "idle";
1993
- }
1994
- function visibleAgentBlock(thread) {
1995
- if (thread.status === "archived" || thread.status === "error" || thread.status === "broken") {
1996
- return null;
1997
- }
1998
- const block = thread.agentBlock;
1999
- if (!block?.reason?.trim()) return null;
2000
- return block;
2001
- }
2002
- function worktreeAgentBlock(group) {
2003
- let best = null;
2004
- for (const thread of group) {
2005
- const block = visibleAgentBlock(thread);
2006
- if (!block) continue;
2007
- if (!best || block.at > best.at) best = block;
2008
- }
2009
- return best;
2010
- }
2011
- function threadCardBlockFields(group) {
2012
- const block = worktreeAgentBlock(group);
2013
- return block ? { blockedReason: block.reason, blockedSource: block.source } : null;
2014
- }
2015
-
2016
2053
  // src/board/pr-state.ts
2017
2054
  function isOpenPrState(prUrl, prState) {
2018
2055
  if (!prUrl?.trim()) return false;
@@ -2789,7 +2826,7 @@ async function createThread(input, _onSetupLine) {
2789
2826
  });
2790
2827
  await requireAgent(resolved.agent);
2791
2828
  if (input.cowboy) {
2792
- const { cowboyModeEnabled } = await import("./app-settings-3OQWRKOK.js");
2829
+ const { cowboyModeEnabled } = await import("./app-settings-DZ5AY7N5.js");
2793
2830
  if (!cowboyModeEnabled()) {
2794
2831
  throw new Error(
2795
2832
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -2848,7 +2885,7 @@ async function createThread(input, _onSetupLine) {
2848
2885
  let sourceIsFork = false;
2849
2886
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
2850
2887
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
2851
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-RYDAQ3FE.js");
2888
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-T5YSJLNZ.js");
2852
2889
  const task = await ensureAbleTimeTask({
2853
2890
  title: title?.trim() || "Untitled work",
2854
2891
  description: input.prompt?.trim() || void 0
@@ -2959,7 +2996,7 @@ async function createThread(input, _onSetupLine) {
2959
2996
  return readThread(thread.id) ?? thread;
2960
2997
  }
2961
2998
  async function listLinearIssues(agent, repoPath) {
2962
- const { getAdapter: getAdapter2 } = await import("./agents-3GN4E2X3.js");
2999
+ const { getAdapter: getAdapter2 } = await import("./agents-IWNQOQOU.js");
2963
3000
  await requireAgent(agent, { requireLinear: true });
2964
3001
  const adapter = getAdapter2(agent);
2965
3002
  if (!adapter.listLinearIssues) {
@@ -3735,7 +3772,7 @@ async function adoptThread(input) {
3735
3772
  messages: input.messages ?? []
3736
3773
  });
3737
3774
  writeThread(thread);
3738
- const { addWorkspace: addWorkspace2 } = await import("./workspaces-6DJL4IST.js");
3775
+ const { addWorkspace: addWorkspace2 } = await import("./workspaces-BQUDYTBX.js");
3739
3776
  await addWorkspace2(repoPath);
3740
3777
  const { ensureWorktreeSideboardIgnored } = await import("./worktree-exclude-RXZPTCNH.js");
3741
3778
  await ensureWorktreeSideboardIgnored(input.worktreePath);
@@ -6664,7 +6701,7 @@ function formatScheduledPrompt(name, prompt) {
6664
6701
  ${prompt}`;
6665
6702
  }
6666
6703
  async function defaultDeps() {
6667
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-CZPRDLHV.js");
6704
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-IKKSYIQ3.js");
6668
6705
  const orch = getOrchestrator2();
6669
6706
  return {
6670
6707
  findThread: (id) => findThreadByRef(id),
@@ -6982,7 +7019,7 @@ var Orchestrator = class {
6982
7019
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
6983
7020
  });
6984
7021
  }
6985
- const { autoCleanupOrphansEnabled } = await import("./app-settings-3OQWRKOK.js");
7022
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-DZ5AY7N5.js");
6986
7023
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
6987
7024
  await cleanupOrphanWorktrees({ repoPaths });
6988
7025
  }
@@ -7376,7 +7413,7 @@ var Orchestrator = class {
7376
7413
  }
7377
7414
  await setup;
7378
7415
  if (skipSetup) return;
7379
- const { autoRunAfterSetupEnabled } = await import("./app-settings-3OQWRKOK.js");
7416
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-DZ5AY7N5.js");
7380
7417
  if (autoRunAfterSetupEnabled()) {
7381
7418
  try {
7382
7419
  await this.startDev(threadId);
@@ -7768,7 +7805,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
7768
7805
  }
7769
7806
  const isBrightsy = fresh.agent === "brightsy";
7770
7807
  const isOrchestration = isOrchestratorThread(fresh);
7771
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-3OQWRKOK.js");
7808
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-DZ5AY7N5.js");
7772
7809
  const gitAuthMode = getGithubGitAuthMode();
7773
7810
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
7774
7811
  githubSlug: await withTimeout(
@@ -7923,7 +7960,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
7923
7960
  if (!this.stoppedTurns.has(threadId) && this.requireThread(threadId).agent === "cursor" && exitCode !== 0 && !assistantText && parts.length === 0) {
7924
7961
  const sessionId = result.sessionId || this.requireThread(threadId).sessionId || "";
7925
7962
  if (sessionId) {
7926
- const { recoverFinishedCursorRun } = await import("./cursor-recover-A6V5UVFT.js");
7963
+ const { recoverFinishedCursorRun } = await import("./cursor-recover-OWPQUHFH.js");
7927
7964
  for (let i = 0; i < 8; i++) {
7928
7965
  const recovered = recoverFinishedCursorRun({
7929
7966
  agentId: sessionId,
@@ -9084,7 +9121,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
9084
9121
  if (Object.keys(patch).length === 0) continue;
9085
9122
  updateThread(t.id, patch);
9086
9123
  }
9087
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-3OQWRKOK.js");
9124
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-DZ5AY7N5.js");
9088
9125
  const latest = this.requireThread(thread.id);
9089
9126
  if (!shouldAutoArchiveOnPrMerge({
9090
9127
  previousPrState: prevState || null,
@@ -9293,6 +9330,11 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
9293
9330
  if (!next) throw new Error("Title cannot be empty");
9294
9331
  return updateThread(thread.id, { title: next, userSetTitle: true });
9295
9332
  }
9333
+ dismissAskUser(threadRef, signature) {
9334
+ const thread = this.requireThread(threadRef);
9335
+ dismissAskUserQuestion(thread.id, signature);
9336
+ return this.requireThread(thread.id);
9337
+ }
9296
9338
  setWorkspaceTags(threadRef, tags) {
9297
9339
  return applyWorkspaceTags(threadRef, tags, "replace");
9298
9340
  }
@@ -9403,7 +9445,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
9403
9445
  await runArchiveScript(thread.repoPath, thread.worktreePath);
9404
9446
  } catch {
9405
9447
  }
9406
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-3OQWRKOK.js");
9448
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-DZ5AY7N5.js");
9407
9449
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
9408
9450
  await removeWorktree(thread.repoPath, thread.worktreePath, {
9409
9451
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -9418,7 +9460,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
9418
9460
  throw new Error("Thread is not archived");
9419
9461
  }
9420
9462
  if (isGlobalThread(thread)) {
9421
- const { globalAgentCwd } = await import("./paths-5JYXTAPC.js");
9463
+ const { globalAgentCwd } = await import("./paths-PHWEVXD5.js");
9422
9464
  updateThread(thread.id, { worktreePath: globalAgentCwd() });
9423
9465
  const restored2 = setStatus(thread.id, "idle");
9424
9466
  this.emit({ type: "status_changed", threadId: restored2.id, status: restored2.status });
@@ -9539,7 +9581,7 @@ async function startOrchestration(opts) {
9539
9581
  sourceRef: "default",
9540
9582
  ...createOpts
9541
9583
  }).catch(async () => {
9542
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-2BYVRYPJ.js");
9584
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-C5VI46RZ.js");
9543
9585
  const repo = await resolveRepoRoot2(repoPath);
9544
9586
  const def = await resolveDefaultBranch2(repo);
9545
9587
  return orch.createThread({
@@ -9549,7 +9591,7 @@ async function startOrchestration(opts) {
9549
9591
  repoPath: repo
9550
9592
  });
9551
9593
  });
9552
- const { updateThread: upd } = await import("./thread-store-PNX4HVLO.js");
9594
+ const { updateThread: upd } = await import("./thread-store-HY22M5A7.js");
9553
9595
  const updated = upd(thread.id, {
9554
9596
  sourceType: "orchestration",
9555
9597
  sourceRef: goal
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  cursorSdkStoreDir
5
- } from "./chunk-4RZRHTSZ.js";
5
+ } from "./chunk-WMZIANPV.js";
6
6
  import {
7
7
  normalizeThinkingEffort
8
8
  } from "./chunk-KGZBYWZ3.js";
@@ -10,7 +10,7 @@ import {
10
10
  threadFilePath,
11
11
  threadLockPath,
12
12
  threadsDir
13
- } from "./chunk-H5XL4KUS.js";
13
+ } from "./chunk-WOU343SI.js";
14
14
 
15
15
  // src/store/thread-store.ts
16
16
  import { randomUUID } from "crypto";
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-2UG25RMK.js";
14
14
  import {
15
15
  appDataDir
16
- } from "./chunk-H5XL4KUS.js";
16
+ } from "./chunk-WOU343SI.js";
17
17
 
18
18
  // src/brightsy/connected-teams.ts
19
19
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  ensureGhPreferOrigin,
4
4
  resolveGithubRepoSlug,
5
5
  resolveRepoRoot
6
- } from "./chunk-GEFH4QFX.js";
6
+ } from "./chunk-BIPXOHZI.js";
7
7
  import {
8
8
  allocateTeamName,
9
9
  createEmptyThread,
@@ -12,7 +12,7 @@ import {
12
12
  teamSlugFromName,
13
13
  updateThread,
14
14
  writeThread
15
- } from "./chunk-P2GHFJOB.js";
15
+ } from "./chunk-HG25AYBV.js";
16
16
  import {
17
17
  ATTACHMENTS_DIR,
18
18
  attachmentsGitignoreBody
@@ -29,13 +29,13 @@ import {
29
29
  resolveThreadDefaults,
30
30
  resolveViewerProfile,
31
31
  resolveViewerProfileForRepo
32
- } from "./chunk-RSATPXU4.js";
32
+ } from "./chunk-A2YXQC65.js";
33
33
  import {
34
34
  appDataDir,
35
35
  globalAgentCwd,
36
36
  loadRepoSettings,
37
37
  sideboardReposDir
38
- } from "./chunk-EHT2DRT4.js";
38
+ } from "./chunk-H4UEFJRI.js";
39
39
 
40
40
  // src/store/workspaces.ts
41
41
  import { existsSync as existsSync2, mkdirSync as mkdirSync3, readFileSync as readFileSync3, statSync as statSync2, writeFileSync as writeFileSync3 } from "fs";
@@ -11,11 +11,11 @@ import {
11
11
  isGlobalThread,
12
12
  isOrchestratorThread,
13
13
  isSlackCoordinatorThread
14
- } from "./chunk-YCDHLK2Z.js";
14
+ } from "./chunk-X3FSWWW2.js";
15
15
  import {
16
16
  mergeAgentGitAuthEnv,
17
17
  resolveAgentGitAuthEnv
18
- } from "./chunk-5MVOZLN7.js";
18
+ } from "./chunk-DLGGLV2M.js";
19
19
  import {
20
20
  ATTACHMENTS_DIR,
21
21
  DETACHED_JOBS_DIR,
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  assertOrchestratorCapableAgent,
34
34
  contextTokens
35
- } from "./chunk-BU6HH5VA.js";
35
+ } from "./chunk-PHMFAU35.js";
36
36
  import {
37
37
  stripNestedElectronEnv
38
38
  } from "./chunk-WWUABK6B.js";
@@ -46,26 +46,28 @@ import {
46
46
  updateThread,
47
47
  worktreeNameFromPath,
48
48
  writeThread
49
- } from "./chunk-FA3V56KF.js";
49
+ } from "./chunk-3UDRWMIM.js";
50
50
  import {
51
51
  findConventionSetup,
52
52
  loadRepoSettings,
53
53
  loadWorkspaceSettings,
54
54
  runCursorWorktreeSetup,
55
55
  workspaceSettingsSourceLabel
56
- } from "./chunk-H5XL4KUS.js";
56
+ } from "./chunk-WOU343SI.js";
57
57
 
58
58
  // src/hook/conductor.ts
59
59
  import {
60
60
  copyFileSync,
61
61
  existsSync as existsSync4,
62
+ lstatSync,
62
63
  mkdirSync as mkdirSync5,
63
64
  readdirSync as readdirSync2,
64
65
  readFileSync as readFileSync4,
65
- realpathSync
66
+ realpathSync,
67
+ symlinkSync
66
68
  } from "fs";
67
69
  import { execFileSync } from "child_process";
68
- import { basename, dirname as dirname4, join as join5, resolve, sep } from "path";
70
+ import { basename, dirname as dirname4, isAbsolute, join as join5, resolve, sep } from "path";
69
71
  import { execa } from "execa";
70
72
  import { createInterface } from "readline";
71
73
 
@@ -1674,7 +1676,7 @@ var PORT_RANGE_SIZE = 10;
1674
1676
  var RECLAIM_RETRY_DELAY_MS = 40;
1675
1677
  var RECLAIM_TRIES = 8;
1676
1678
  async function killReclaimable(ports, worktreePath, signal) {
1677
- const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-2AVFGSQJ.js");
1679
+ const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-ZFRXTVGP.js");
1678
1680
  if (worktreePath) killStaleWorktreeListeners2(ports, worktreePath, signal);
1679
1681
  else killListenersOnPorts2(ports);
1680
1682
  }
@@ -1926,8 +1928,56 @@ function copyConfiguredFiles(repoPath, worktreePath) {
1926
1928
  copyFileSync(src, dest);
1927
1929
  copied.push(rel);
1928
1930
  }
1931
+ linkSharedDirectories(repoPath, worktreePath);
1929
1932
  return copied;
1930
1933
  }
1934
+ function linkSharedDirectories(repoPath, worktreePath) {
1935
+ const dirs = loadRepoSettings(repoPath)?.sharedDirectories ?? [];
1936
+ if (!dirs.length || samePath(repoPath, worktreePath)) return [];
1937
+ const linked = [];
1938
+ for (const rel of dirs) {
1939
+ if (!isSafeRelativeDir(rel)) continue;
1940
+ if (!isGitignored(repoPath, rel)) continue;
1941
+ const src = join5(repoPath, rel);
1942
+ let srcStat;
1943
+ try {
1944
+ srcStat = lstatSync(src);
1945
+ } catch {
1946
+ continue;
1947
+ }
1948
+ if (!srcStat.isDirectory()) continue;
1949
+ const dest = join5(worktreePath, rel);
1950
+ if (existsSync4(dest)) continue;
1951
+ mkdirSync5(dirname4(dest), { recursive: true });
1952
+ try {
1953
+ symlinkSync(src, dest);
1954
+ } catch {
1955
+ continue;
1956
+ }
1957
+ linked.push(rel);
1958
+ }
1959
+ return linked;
1960
+ }
1961
+ function samePath(a, b) {
1962
+ try {
1963
+ return realpathSync(a) === realpathSync(b);
1964
+ } catch {
1965
+ return resolve(a) === resolve(b);
1966
+ }
1967
+ }
1968
+ function isSafeRelativeDir(rel) {
1969
+ if (!rel || isAbsolute(rel)) return false;
1970
+ const parts = rel.split(/[\\/]/).filter(Boolean);
1971
+ return parts.length > 0 && parts.every((part) => part !== "." && part !== "..");
1972
+ }
1973
+ function isGitignored(repoPath, rel) {
1974
+ try {
1975
+ execFileSync("git", ["-C", repoPath, "check-ignore", "-q", "--", rel], { stdio: "ignore" });
1976
+ return true;
1977
+ } catch {
1978
+ return false;
1979
+ }
1980
+ }
1931
1981
  var cachedLoginEnv = null;
1932
1982
  async function captureLoginEnv() {
1933
1983
  if (cachedLoginEnv) return { ...cachedLoginEnv };
@@ -2307,6 +2357,8 @@ async function startDevServer(repoPath, worktreePath, onLine, opts) {
2307
2357
  }
2308
2358
 
2309
2359
  export {
2360
+ planQuestionsSignature,
2361
+ parsePlanQuestionsInput,
2310
2362
  isAskUserToolName,
2311
2363
  extractPendingPlanQuestions,
2312
2364
  needsCoordinatorAction,
@@ -2357,6 +2409,7 @@ export {
2357
2409
  readWorktreeInclude,
2358
2410
  resolveFilesToCopy,
2359
2411
  copyConfiguredFiles,
2412
+ linkSharedDirectories,
2360
2413
  captureLoginEnv,
2361
2414
  buildWorkspaceScriptEnv,
2362
2415
  killableListenerPids,
@@ -125,7 +125,7 @@ async function connectedCliPresence(integrations) {
125
125
  const ids = connectedOptionalServices(integrations).filter((spec) => spec.cli).map((spec) => spec.id);
126
126
  if (ids.length === 0) return void 0;
127
127
  try {
128
- const { optionalCliPresence } = await import("./optional-cli-JQVNSMSU.js");
128
+ const { optionalCliPresence } = await import("./optional-cli-QDIT57VD.js");
129
129
  return await optionalCliPresence(ids);
130
130
  } catch {
131
131
  return void 0;
@@ -6,14 +6,14 @@ import {
6
6
  normalizeAbleTimeCredential,
7
7
  normalizeAbleTimeHost,
8
8
  rewriteAbleTimeError
9
- } from "./chunk-HSF2RQSQ.js";
9
+ } from "./chunk-CFTOKVQN.js";
10
10
  import {
11
11
  httpFetch
12
12
  } from "./chunk-2GPQZZLY.js";
13
13
  import {
14
14
  getAbleTimeAccessToken,
15
15
  getAbleTimeHost
16
- } from "./chunk-BU6HH5VA.js";
16
+ } from "./chunk-PHMFAU35.js";
17
17
 
18
18
  // src/integrations/abletime-rest.ts
19
19
  var ABLETIME_REST_PREFIX = "/api/public/v2";