@sideboard-ai/core 0.1.235 → 0.1.236

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 (67) hide show
  1. package/dist/{abletime-WZNDTRVL.js → abletime-KOGCIQCO.js} +5 -5
  2. package/dist/{abletime-BGVOCEOU.js → abletime-VSV6AUBV.js} +5 -5
  3. package/dist/{abletime-oauth-ZLU2EYRK.js → abletime-oauth-LY7KZICW.js} +4 -4
  4. package/dist/{abletime-oauth-6M5GWEPX.js → abletime-oauth-QMDV45JC.js} +4 -4
  5. package/dist/{abletime-rest-WNHIATB3.js → abletime-rest-LXOWKPL7.js} +4 -4
  6. package/dist/{abletime-rest-F7XG5NGY.js → abletime-rest-NL56UVK5.js} +4 -4
  7. package/dist/agents/cursor-runner.cjs +39 -35
  8. package/dist/agents/cursor-runner.js +3 -3
  9. package/dist/{agents-37JCAVSC.js → agents-JC6DRIT3.js} +9 -9
  10. package/dist/{agents-MOMMKSYV.js → agents-S4HYHRL3.js} +8 -8
  11. package/dist/{app-settings-KBL2G7M4.js → app-settings-2CFCRYD7.js} +2 -2
  12. package/dist/{app-settings-UXWCPDEA.js → app-settings-I27UBVI4.js} +2 -2
  13. package/dist/{caffeinate-hold-OK4JJ5PP.js → caffeinate-hold-FNKIPXDU.js} +2 -2
  14. package/dist/{caffeinate-hold-22VFDPSO.js → caffeinate-hold-PXHGH7ZN.js} +2 -2
  15. package/dist/{chunk-7J72QJOM.js → chunk-224IXQOM.js} +1 -1
  16. package/dist/{chunk-4VGCG2HV.js → chunk-3AJUH66R.js} +2 -2
  17. package/dist/{chunk-P6ZM5QJW.js → chunk-3PGFAVFL.js} +2 -2
  18. package/dist/{chunk-RZTRWN2V.js → chunk-4H5WO4H3.js} +1 -1
  19. package/dist/{chunk-MVLXDYN5.js → chunk-5ELC3KK3.js} +5 -5
  20. package/dist/{chunk-WPD7BR6C.js → chunk-5SHYLRTU.js} +1 -1
  21. package/dist/{chunk-S2OEFXST.js → chunk-5UN5C5WP.js} +5 -5
  22. package/dist/{chunk-LJWF3VA3.js → chunk-6Q2CFQ4D.js} +74 -30
  23. package/dist/{chunk-WFUDY6PC.js → chunk-A4JGXX2F.js} +155 -24
  24. package/dist/{chunk-EAYXD2IC.js → chunk-ANGPU5JL.js} +282 -14
  25. package/dist/{chunk-GHRZNPBK.js → chunk-C2CBF4YE.js} +2 -2
  26. package/dist/{chunk-TNVJPFHM.js → chunk-CJKL7A4G.js} +5 -5
  27. package/dist/{chunk-SWNEA5OZ.js → chunk-CRAXJAYJ.js} +3 -3
  28. package/dist/{chunk-C774RJJA.js → chunk-CWHMLCLN.js} +3 -3
  29. package/dist/{chunk-YWI3IBP2.js → chunk-DQN5U2VH.js} +1 -1
  30. package/dist/{chunk-D4VKJO5C.js → chunk-DYXNBXE3.js} +304 -16
  31. package/dist/{chunk-SPAMHHJH.js → chunk-J5GON4SU.js} +1 -1
  32. package/dist/{chunk-4VFOJZPS.js → chunk-JXZS56VW.js} +3 -3
  33. package/dist/{chunk-EQNRWDLN.js → chunk-KK63BFYN.js} +151 -24
  34. package/dist/{chunk-X5B3OS5I.js → chunk-N6XI5KXL.js} +1 -1
  35. package/dist/{chunk-XJETIO4K.js → chunk-NJ5OXOTN.js} +2 -2
  36. package/dist/{chunk-RGNPPRZZ.js → chunk-NYAEMZ3L.js} +3 -3
  37. package/dist/{chunk-7H2CVVLF.js → chunk-O3UAQAYA.js} +3 -3
  38. package/dist/{chunk-4TYXWPAJ.js → chunk-OJFEVWZN.js} +1 -1
  39. package/dist/{chunk-I5NC7DWO.js → chunk-P3DCZRER.js} +1 -1
  40. package/dist/{chunk-TWXSZYR2.js → chunk-RRXRLHIE.js} +5 -5
  41. package/dist/{chunk-AS4UN7QL.js → chunk-VVOAXBND.js} +5 -5
  42. package/dist/{chunk-7366AB7E.js → chunk-XMCJDWPA.js} +77 -32
  43. package/dist/{connected-teams-KQUDU7LZ.js → connected-teams-62AJRDDD.js} +2 -2
  44. package/dist/{connected-teams-JUJAQZZE.js → connected-teams-GXV22ZSF.js} +2 -2
  45. package/dist/{coordinator-prompt-CE7MN6QY.js → coordinator-prompt-2BRUH7PJ.js} +6 -6
  46. package/dist/{coordinator-prompt-IGDMFKCD.js → coordinator-prompt-BIP7ZEJ3.js} +6 -6
  47. package/dist/{cursor-recover-DTQAUDGO.js → cursor-recover-DFMCTZA4.js} +2 -2
  48. package/dist/{cursor-recover-4PQAADAU.js → cursor-recover-K3EBEM7M.js} +2 -2
  49. package/dist/{global-workspace-7WH24UFO.js → global-workspace-3XZN3QHZ.js} +6 -6
  50. package/dist/{global-workspace-NCIC2Y2U.js → global-workspace-DWCFG7LP.js} +6 -6
  51. package/dist/index.cjs +1219 -707
  52. package/dist/index.d.cts +70 -1
  53. package/dist/index.d.ts +70 -1
  54. package/dist/index.js +79 -23
  55. package/dist/mcp/run-stdio.cjs +1123 -659
  56. package/dist/mcp/run-stdio.js +45 -22
  57. package/dist/{orchestrator-6NPBOBNA.js → orchestrator-AYPDBGIF.js} +10 -10
  58. package/dist/{orchestrator-RKWRI3PJ.js → orchestrator-TEJJAQWP.js} +11 -11
  59. package/dist/{paths-C2VERLAE.js → paths-LGKOG7MY.js} +1 -1
  60. package/dist/{paths-LOXCISLX.js → paths-O6ZEAEUD.js} +1 -1
  61. package/dist/{thread-store-IKJD4EOK.js → thread-store-AYPBEZT5.js} +3 -3
  62. package/dist/{thread-store-FBK5SZ5P.js → thread-store-YOPKY74K.js} +3 -3
  63. package/dist/{workspaces-H2TRFDE2.js → workspaces-NYT2472Z.js} +6 -6
  64. package/dist/{workspaces-NSQZSDQD.js → workspaces-V7522TQH.js} +6 -6
  65. package/dist/{worktree-W7BSI4GU.js → worktree-AGVPKDBH.js} +5 -5
  66. package/dist/{worktree-FMIX4BRV.js → worktree-IRALYI6A.js} +5 -5
  67. package/package.json +1 -1
@@ -24,7 +24,7 @@ import {
24
24
  resolveQuotaFallbackAgent,
25
25
  stripBrightsyNdjsonNoise,
26
26
  toolDescription
27
- } from "./chunk-D4VKJO5C.js";
27
+ } from "./chunk-DYXNBXE3.js";
28
28
  import {
29
29
  SLACK_REPLY_FORMATTING,
30
30
  addWorkspace,
@@ -47,7 +47,7 @@ import {
47
47
  stageAbsolutePathsAsAttachments,
48
48
  stageBuffersAsAttachments,
49
49
  syncWorkspacesFromThreads
50
- } from "./chunk-S2OEFXST.js";
50
+ } from "./chunk-5UN5C5WP.js";
51
51
  import {
52
52
  addPrStackLayer,
53
53
  allocateTeamName,
@@ -96,7 +96,7 @@ import {
96
96
  worktreeDisplayLabelForGroup,
97
97
  worktreeNameFromPath,
98
98
  worktreeSlugForTicket
99
- } from "./chunk-7H2CVVLF.js";
99
+ } from "./chunk-O3UAQAYA.js";
100
100
  import {
101
101
  ATTACHMENTS_DIR,
102
102
  DETACHED_JOBS_DIR,
@@ -128,7 +128,7 @@ import {
128
128
  shouldRetryFailedAgentTurn,
129
129
  summarizeTurnStderr,
130
130
  turnFailChatText
131
- } from "./chunk-WPD7BR6C.js";
131
+ } from "./chunk-5SHYLRTU.js";
132
132
  import {
133
133
  HISTORY_CLEANUP_INTERVAL_HOURS_DEFAULT,
134
134
  applyTurnUsage,
@@ -163,14 +163,14 @@ import {
163
163
  updateAdvancedSettings,
164
164
  usageOnLimit,
165
165
  writeSecureJson
166
- } from "./chunk-I5NC7DWO.js";
166
+ } from "./chunk-P3DCZRER.js";
167
167
  import {
168
168
  examplePrefixedBranch,
169
169
  sanitizeGitBranchPrefix
170
170
  } from "./chunk-WDRMZKVB.js";
171
171
  import {
172
172
  releaseCaffeinateHoldForThread
173
- } from "./chunk-4TYXWPAJ.js";
173
+ } from "./chunk-OJFEVWZN.js";
174
174
  import {
175
175
  writePrivateFile
176
176
  } from "./chunk-JT7R45JB.js";
@@ -185,8 +185,9 @@ import {
185
185
  updateThread,
186
186
  withThreadLock,
187
187
  writeThread
188
- } from "./chunk-4VGCG2HV.js";
188
+ } from "./chunk-3AJUH66R.js";
189
189
  import {
190
+ annotateDevAccessRuns,
190
191
  appDataDir,
191
192
  findConventionSetup,
192
193
  loadRepoSettings,
@@ -198,7 +199,7 @@ import {
198
199
  threadsDir,
199
200
  workspaceSettingsSourceLabel,
200
201
  worktreesRoot
201
- } from "./chunk-WFUDY6PC.js";
202
+ } from "./chunk-A4JGXX2F.js";
202
203
  import {
203
204
  clearStaleIndexLocks,
204
205
  enrichPathWithNpmGlobalBin,
@@ -482,7 +483,7 @@ async function continueSourceThread(threadId, prompt) {
482
483
  await continueOnReply(threadId, prompt);
483
484
  return;
484
485
  }
485
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-RKWRI3PJ.js");
486
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-TEJJAQWP.js");
486
487
  await getOrchestrator2().send(threadId, prompt);
487
488
  } catch {
488
489
  }
@@ -901,9 +902,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
901
902
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
902
903
  );
903
904
  }
904
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-NCIC2Y2U.js");
905
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-DWCFG7LP.js");
905
906
  if (isGlobalThread2(thread)) {
906
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-IGDMFKCD.js");
907
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-BIP7ZEJ3.js");
907
908
  ensureGlobalCoordinatorCwd2(
908
909
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
909
910
  );
@@ -4106,7 +4107,7 @@ async function createThread(input, _onSetupLine) {
4106
4107
  });
4107
4108
  await requireAgent(resolved.agent);
4108
4109
  if (input.cowboy) {
4109
- const { cowboyModeEnabled } = await import("./app-settings-UXWCPDEA.js");
4110
+ const { cowboyModeEnabled } = await import("./app-settings-I27UBVI4.js");
4110
4111
  if (!cowboyModeEnabled()) {
4111
4112
  throw new Error(
4112
4113
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -4164,7 +4165,7 @@ async function createThread(input, _onSetupLine) {
4164
4165
  let sourceIsFork = false;
4165
4166
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
4166
4167
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
4167
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-BGVOCEOU.js");
4168
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-VSV6AUBV.js");
4168
4169
  const task = await ensureAbleTimeTask({
4169
4170
  title: title?.trim() || "Untitled work",
4170
4171
  description: input.prompt?.trim() || void 0
@@ -4266,7 +4267,7 @@ async function createThread(input, _onSetupLine) {
4266
4267
  return readThread(thread.id) ?? thread;
4267
4268
  }
4268
4269
  async function listLinearIssues(agent, repoPath) {
4269
- const { getAdapter: getAdapter2 } = await import("./agents-37JCAVSC.js");
4270
+ const { getAdapter: getAdapter2 } = await import("./agents-JC6DRIT3.js");
4270
4271
  await requireAgent(agent, { requireLinear: true });
4271
4272
  const adapter = getAdapter2(agent);
4272
4273
  if (!adapter.listLinearIssues) {
@@ -4739,7 +4740,7 @@ async function adoptThread(input) {
4739
4740
  messages: input.messages ?? []
4740
4741
  });
4741
4742
  writeThread(thread);
4742
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-H2TRFDE2.js");
4743
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-NYT2472Z.js");
4743
4744
  await ensureWorkspace2(repoPath);
4744
4745
  const { ensureWorktreeSideboardIgnored: ensureWorktreeSideboardIgnored2 } = await import("./worktree-exclude-RXZPTCNH.js");
4745
4746
  await ensureWorktreeSideboardIgnored2(input.worktreePath);
@@ -6661,6 +6662,34 @@ function formatRenameBranchDirective(thread, opts) {
6661
6662
  }
6662
6663
  return lines.join("\n");
6663
6664
  }
6665
+ function localhostPreviewUrl(port) {
6666
+ return `http://localhost:${port}`;
6667
+ }
6668
+ function describeLiveDevRun(run2) {
6669
+ const url = localhostPreviewUrl(run2.port);
6670
+ if (run2.preview === "window") {
6671
+ return `${run2.scriptName} Electron window (renderer ${url})`;
6672
+ }
6673
+ return `${run2.scriptName} ${url}`;
6674
+ }
6675
+ function formatDevAccessHint(runs) {
6676
+ const live = (runs ?? []).filter(
6677
+ (r) => Number.isFinite(r.port) && r.port > 0
6678
+ );
6679
+ if (live.length === 1) {
6680
+ const r = live[0];
6681
+ const url = localhostPreviewUrl(r.port);
6682
+ if (r.preview === "window") {
6683
+ return `This worktree's Dev app is the Electron window (${r.scriptName}). Renderer origin ${url} \u2014 curl to confirm Vite; do not open it in a browser (no preload/IPC). Do not guess :3000.`;
6684
+ }
6685
+ return `This worktree's Dev app is ${url} (${r.scriptName}). Open that URL (browser, curl, Playwright) \u2014 do not guess :3000.`;
6686
+ }
6687
+ if (live.length > 1) {
6688
+ const bits = live.map(describeLiveDevRun).join("; ");
6689
+ return `This worktree's Dev apps: ${bits}. preview=url \u2192 open the URL; preview=window \u2192 Electron window is the app. Do not guess :3000.`;
6690
+ }
6691
+ return "To open the project Dev app: MCP `run_dev_script` (same as the desktop Dev button) returns `{url, port, preview}` (`SIDEBOARD_PORT`, not 3000). preview=url \u2192 open that URL (browser, curl, Playwright). preview=window \u2192 Electron: the native window is the app; url is renderer/HMR only (no preload/IPC in a browser). If already running, `list_run_scripts` `active[].url`. `stop_dev_script` to stop.";
6692
+ }
6664
6693
  function formatWorktreeDirective(thread, opts) {
6665
6694
  const worktree = normPath(thread.worktreePath);
6666
6695
  const repo = normPath(thread.repoPath);
@@ -6708,6 +6737,8 @@ function formatWorktreeDirective(thread, opts) {
6708
6737
  '- Sideboard git buttons send short phrases ("Commit and push.", "Ready for review.", "Merge PR.", \u2026) with their meaning attached \u2014 act on them without asking for clarification. If the user gives a goal (Greptile 5/5, CI green, until checks pass), you get the watch-fix-push playbook with that request.'
6709
6738
  );
6710
6739
  lines.push("");
6740
+ lines.push(formatDevAccessHint(opts?.activeRuns));
6741
+ lines.push("");
6711
6742
  lines.push(formatProcessGuideDirective({ worktreePath: thread.worktreePath }));
6712
6743
  return lines.join("\n");
6713
6744
  }
@@ -6833,12 +6864,12 @@ function formatLongRunningDirective(opts) {
6833
6864
  "- Hanging, no useful output, or the wrong thing \u2192 `stop_job` (or the helper with `stop <id>`). Do not stop a pack/test/deploy that is clearly making progress.",
6834
6865
  "- Stay in the loop until stillRunning is false (or you stopped it). ok \u2192 finish the task. failed / stopped \u2192 read the log, fix or narrow the command, start once.",
6835
6866
  "State: `.context/.sideboard/detached-jobs/<id>/` (local scratch). Full guide: `/long-running` (always available).",
6836
- "Project Dev / run scripts (`.sideboard` `[scripts.run.*]`, same as the desktop Dev button): use MCP `list_run_scripts` / `run_dev_script` / `stop_dev_script` \u2014 logs and Stop live in the thread UI. Do not detached-job or shell-spawn that same command."
6867
+ "Project Dev / run scripts (`.sideboard` `[scripts.run.*]`, same as the desktop Dev button): use MCP `list_run_scripts` / `run_dev_script` / `stop_dev_script` \u2014 logs and Stop live in the thread UI. Do not detached-job or shell-spawn that same command. `run_dev_script` returns `{url, port, preview}` (`SIDEBOARD_PORT`). preview=url \u2192 open that URL; preview=window \u2192 Electron window is the app (url is renderer/HMR only). Never guess :3000."
6837
6868
  ].join("\n");
6838
6869
  }
6839
6870
  function formatLongRunningReminder(opts) {
6840
6871
  const invoke = formatDetachedJobInvoke(opts?.scriptPath);
6841
- return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script (UI-connected \u2014 not detached-job).`;
6872
+ return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
6842
6873
  }
6843
6874
  function formatArtifactDirective() {
6844
6875
  return [
@@ -6850,7 +6881,7 @@ function formatArtifactDirective() {
6850
6881
  ].join("\n");
6851
6882
  }
6852
6883
  function formatUiReminder() {
6853
- return "Sideboard UI: markdown table is enough to read data; present_schema if they ask to edit/filter (even after markdown); present_files for the file manager. html fence or present_artifact, not both for the same document. type=log appends (same artifact_id, new lines only). ask_user only for a real multiple-choice (not hellos, \u201Cwhat next?\u201D, or after a review) \u2014 reply in chat. Do not say artifacts/CMS UI are unavailable. Dev / preview: run_dev_script (same as the Dev button); stop_dev_script to stop.";
6884
+ return "Sideboard UI: markdown table is enough to read data; present_schema if they ask to edit/filter (even after markdown); present_files for the file manager. html fence or present_artifact, not both for the same document. type=log appends (same artifact_id, new lines only). ask_user only for a real multiple-choice (not hellos, \u201Cwhat next?\u201D, or after a review) \u2014 reply in chat. Do not say artifacts/CMS UI are unavailable. Dev / preview: run_dev_script (same as the Dev button) returns {url, port, preview} (SIDEBOARD_PORT \u2014 never guess :3000). preview=url \u2192 open url; preview=window \u2192 Electron window is the app, url is renderer/HMR only. list_run_scripts active[].url if already running; stop_dev_script to stop.";
6854
6885
  }
6855
6886
 
6856
6887
  // src/review/review-write-gate.ts
@@ -7421,7 +7452,7 @@ function formatScheduledPrompt(name, prompt) {
7421
7452
  ${prompt}`;
7422
7453
  }
7423
7454
  async function defaultDeps() {
7424
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-RKWRI3PJ.js");
7455
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-TEJJAQWP.js");
7425
7456
  const orch = getOrchestrator2();
7426
7457
  return {
7427
7458
  findThread: (id) => findThreadByRef(id),
@@ -7746,7 +7777,7 @@ var Orchestrator = class {
7746
7777
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
7747
7778
  });
7748
7779
  }
7749
- const { autoCleanupOrphansEnabled } = await import("./app-settings-UXWCPDEA.js");
7780
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-I27UBVI4.js");
7750
7781
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
7751
7782
  await cleanupOrphanWorktrees({ repoPaths });
7752
7783
  }
@@ -8093,7 +8124,7 @@ var Orchestrator = class {
8093
8124
  }
8094
8125
  await setup;
8095
8126
  if (skipSetup) return;
8096
- const { autoRunAfterSetupEnabled } = await import("./app-settings-UXWCPDEA.js");
8127
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-I27UBVI4.js");
8097
8128
  if (autoRunAfterSetupEnabled()) {
8098
8129
  try {
8099
8130
  await this.startDev(threadId);
@@ -8396,8 +8427,13 @@ var Orchestrator = class {
8396
8427
  SLACK_REPLY_FORMATTING
8397
8428
  ].join("\n") : null
8398
8429
  ].filter(Boolean).join("\n") : null;
8430
+ const worktreeActiveRuns = thread.agent !== "brightsy" && !isOrchestratorThread(thread) && thread.worktreePath ? annotateDevAccessRuns(
8431
+ mergeWorktreeActiveRuns(threadsSharingWorktree(thread.worktreePath)).activeRuns,
8432
+ listRunScripts(thread.worktreePath, thread.repoPath),
8433
+ thread.worktreePath
8434
+ ) : [];
8399
8435
  const artifactReminder = thread.agent !== "brightsy" ? formatUiReminder() : null;
8400
- const longRunningReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatLongRunningReminder() : null;
8436
+ const longRunningReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatLongRunningReminder({ activeRuns: worktreeActiveRuns }) : null;
8401
8437
  const worktreeReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatWorktreeReminder() : null;
8402
8438
  const optionalServicesReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatOptionalServicesReminder(loadAppSettings().integrations) : null;
8403
8439
  const issueTicket = issueTicketFromThread(thread, resolveEffectiveIssueSource());
@@ -8449,7 +8485,7 @@ var Orchestrator = class {
8449
8485
  }
8450
8486
  const isBrightsy = fresh.agent === "brightsy";
8451
8487
  const isOrchestration = isOrchestratorThread(fresh);
8452
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-UXWCPDEA.js");
8488
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-I27UBVI4.js");
8453
8489
  const gitAuthMode = getGithubGitAuthMode();
8454
8490
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
8455
8491
  githubSlug: await withTimeout(
@@ -8457,7 +8493,14 @@ var Orchestrator = class {
8457
8493
  8e3,
8458
8494
  "resolveGithubRepoSlug"
8459
8495
  ).catch(() => null),
8460
- gitAuthMode
8496
+ gitAuthMode,
8497
+ activeRuns: annotateDevAccessRuns(
8498
+ mergeWorktreeActiveRuns(
8499
+ threadsSharingWorktree(fresh.worktreePath)
8500
+ ).activeRuns,
8501
+ listRunScripts(fresh.worktreePath, fresh.repoPath),
8502
+ fresh.worktreePath
8503
+ )
8461
8504
  });
8462
8505
  const artifactDirective = isBrightsy ? null : formatArtifactDirective();
8463
8506
  const longRunningDirective = isBrightsy || isOrchestration ? null : formatLongRunningDirective();
@@ -8597,7 +8640,7 @@ var Orchestrator = class {
8597
8640
  if (!this.stoppedTurns.has(threadId) && this.requireThread(threadId).agent === "cursor" && exitCode !== 0 && !assistantText && parts.length === 0) {
8598
8641
  const sessionId = result.sessionId || this.requireThread(threadId).sessionId || "";
8599
8642
  if (sessionId) {
8600
- const { recoverFinishedCursorRun } = await import("./cursor-recover-DTQAUDGO.js");
8643
+ const { recoverFinishedCursorRun } = await import("./cursor-recover-DFMCTZA4.js");
8601
8644
  for (let i = 0; i < 8; i++) {
8602
8645
  const recovered = recoverFinishedCursorRun({
8603
8646
  agentId: sessionId,
@@ -9680,7 +9723,7 @@ var Orchestrator = class {
9680
9723
  if (!titled.userSetTitle && meta.title && titled.title !== meta.title) {
9681
9724
  updateThread(thread.id, { title: meta.title });
9682
9725
  }
9683
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-UXWCPDEA.js");
9726
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-I27UBVI4.js");
9684
9727
  const latest = this.requireThread(thread.id);
9685
9728
  if (!shouldAutoArchiveOnPrMerge({
9686
9729
  previousPrState: prevState || null,
@@ -9962,7 +10005,7 @@ var Orchestrator = class {
9962
10005
  this.enforceHistoryRetention();
9963
10006
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
9964
10007
  try {
9965
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-H2TRFDE2.js");
10008
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-NYT2472Z.js");
9966
10009
  await ensureWorkspace2(thread.repoPath);
9967
10010
  } catch {
9968
10011
  }
@@ -9989,7 +10032,7 @@ var Orchestrator = class {
9989
10032
  await runArchiveScript(thread.repoPath, thread.worktreePath);
9990
10033
  } catch {
9991
10034
  }
9992
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-UXWCPDEA.js");
10035
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-I27UBVI4.js");
9993
10036
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
9994
10037
  await removeWorktree(thread.repoPath, thread.worktreePath, {
9995
10038
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -10004,7 +10047,7 @@ var Orchestrator = class {
10004
10047
  throw new Error("Thread is not archived");
10005
10048
  }
10006
10049
  if (isGlobalThread(thread)) {
10007
- const { globalAgentCwd } = await import("./paths-LOXCISLX.js");
10050
+ const { globalAgentCwd } = await import("./paths-O6ZEAEUD.js");
10008
10051
  updateThread(thread.id, { worktreePath: globalAgentCwd() });
10009
10052
  const restored2 = setStatus(thread.id, "idle");
10010
10053
  this.emit({ type: "status_changed", threadId: restored2.id, status: restored2.status });
@@ -10016,7 +10059,7 @@ var Orchestrator = class {
10016
10059
  `Cowboy checkout missing: ${thread.worktreePath}. Re-add the project folder, then restore.`
10017
10060
  );
10018
10061
  }
10019
- const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-W7BSI4GU.js");
10062
+ const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-AGVPKDBH.js");
10020
10063
  const slug = thread.worktreePath.split("/").pop();
10021
10064
  const dest = thread.worktreePath;
10022
10065
  await withRepoGitLock(thread.repoPath, async () => {
@@ -10126,7 +10169,7 @@ async function startOrchestration(opts) {
10126
10169
  sourceRef: "default",
10127
10170
  ...createOpts
10128
10171
  }).catch(async () => {
10129
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-W7BSI4GU.js");
10172
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-AGVPKDBH.js");
10130
10173
  const repo = await resolveRepoRoot2(repoPath);
10131
10174
  const def = await resolveDefaultBranch2(repo);
10132
10175
  return orch.createThread({
@@ -10136,7 +10179,7 @@ async function startOrchestration(opts) {
10136
10179
  repoPath: repo
10137
10180
  });
10138
10181
  });
10139
- const { updateThread: upd } = await import("./thread-store-IKJD4EOK.js");
10182
+ const { updateThread: upd } = await import("./thread-store-AYPBEZT5.js");
10140
10183
  const updated = upd(thread.id, {
10141
10184
  sourceType: "orchestration",
10142
10185
  sourceRef: goal
@@ -10371,6 +10414,8 @@ export {
10371
10414
  resolveDetachedJobScript,
10372
10415
  formatDetachedJobInvoke,
10373
10416
  formatRenameBranchDirective,
10417
+ localhostPreviewUrl,
10418
+ formatDevAccessHint,
10374
10419
  formatWorktreeDirective,
10375
10420
  formatWorktreeReminder,
10376
10421
  mentionsPrGoal,
@@ -9,11 +9,11 @@ import {
9
9
  ensureConnectedBrightsyTeamTokens,
10
10
  getConnectedBrightsyTeamsRaw,
11
11
  listConnectedBrightsyTeams
12
- } from "./chunk-SPAMHHJH.js";
12
+ } from "./chunk-J5GON4SU.js";
13
13
  import "./chunk-P2BSMNHB.js";
14
14
  import "./chunk-VKQGAWHY.js";
15
15
  import "./chunk-2UG25RMK.js";
16
- import "./chunk-EQNRWDLN.js";
16
+ import "./chunk-KK63BFYN.js";
17
17
  import "./chunk-WWUABK6B.js";
18
18
  export {
19
19
  applyConnectedTeamToCli,
@@ -7,10 +7,10 @@ import {
7
7
  ensureConnectedBrightsyTeamTokens,
8
8
  getConnectedBrightsyTeamsRaw,
9
9
  listConnectedBrightsyTeams
10
- } from "./chunk-TNVJPFHM.js";
10
+ } from "./chunk-CJKL7A4G.js";
11
11
  import "./chunk-ROPGQRPU.js";
12
12
  import "./chunk-N7WZ6NIN.js";
13
- import "./chunk-WFUDY6PC.js";
13
+ import "./chunk-A4JGXX2F.js";
14
14
  import "./chunk-QVN2WOKJ.js";
15
15
  import "./chunk-4TR3HZFT.js";
16
16
  export {
@@ -9,17 +9,17 @@ import {
9
9
  enrichWorkspacesWithGithub,
10
10
  ensureGlobalCoordinatorCwd,
11
11
  formatWorkspaceInventory
12
- } from "./chunk-TWXSZYR2.js";
13
- import "./chunk-4VFOJZPS.js";
12
+ } from "./chunk-RRXRLHIE.js";
13
+ import "./chunk-JXZS56VW.js";
14
14
  import "./chunk-D6JWYJ4P.js";
15
- import "./chunk-XJETIO4K.js";
16
- import "./chunk-X5B3OS5I.js";
15
+ import "./chunk-NJ5OXOTN.js";
16
+ import "./chunk-N6XI5KXL.js";
17
17
  import "./chunk-DD67JWTN.js";
18
18
  import "./chunk-2UG25RMK.js";
19
- import "./chunk-RZTRWN2V.js";
19
+ import "./chunk-4H5WO4H3.js";
20
20
  import "./chunk-NSTQ6QKD.js";
21
21
  import "./chunk-KGZBYWZ3.js";
22
- import "./chunk-EQNRWDLN.js";
22
+ import "./chunk-KK63BFYN.js";
23
23
  import "./chunk-WWUABK6B.js";
24
24
  import "./chunk-FJZWM2ON.js";
25
25
  export {
@@ -7,17 +7,17 @@ import {
7
7
  enrichWorkspacesWithGithub,
8
8
  ensureGlobalCoordinatorCwd,
9
9
  formatWorkspaceInventory
10
- } from "./chunk-S2OEFXST.js";
11
- import "./chunk-7H2CVVLF.js";
10
+ } from "./chunk-5UN5C5WP.js";
11
+ import "./chunk-O3UAQAYA.js";
12
12
  import "./chunk-6K64FJDD.js";
13
13
  import "./chunk-2P4XKWV2.js";
14
- import "./chunk-I5NC7DWO.js";
14
+ import "./chunk-P3DCZRER.js";
15
15
  import "./chunk-WDRMZKVB.js";
16
16
  import "./chunk-JT7R45JB.js";
17
- import "./chunk-4VGCG2HV.js";
18
- import "./chunk-7J72QJOM.js";
17
+ import "./chunk-3AJUH66R.js";
18
+ import "./chunk-224IXQOM.js";
19
19
  import "./chunk-77WWLBCI.js";
20
- import "./chunk-WFUDY6PC.js";
20
+ import "./chunk-A4JGXX2F.js";
21
21
  import "./chunk-QVN2WOKJ.js";
22
22
  import "./chunk-4TR3HZFT.js";
23
23
  export {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cursorSdkRunsNdjsonSearchPaths
3
- } from "./chunk-7J72QJOM.js";
4
- import "./chunk-WFUDY6PC.js";
3
+ } from "./chunk-224IXQOM.js";
4
+ import "./chunk-A4JGXX2F.js";
5
5
 
6
6
  // src/agents/cursor-recover.ts
7
7
  import { existsSync, readFileSync } from "fs";
@@ -2,8 +2,8 @@
2
2
 
3
3
  import {
4
4
  cursorSdkRunsNdjsonSearchPaths
5
- } from "./chunk-X5B3OS5I.js";
6
- import "./chunk-EQNRWDLN.js";
5
+ } from "./chunk-N6XI5KXL.js";
6
+ import "./chunk-KK63BFYN.js";
7
7
 
8
8
  // src/agents/cursor-recover.ts
9
9
  import { existsSync, readFileSync } from "fs";
@@ -17,19 +17,19 @@ import {
17
17
  orchestratorSessionPoisonedByBuiltins,
18
18
  slackCoordinatorSourceRef,
19
19
  takenTeamSlugsForOrchestration
20
- } from "./chunk-TWXSZYR2.js";
21
- import "./chunk-4VFOJZPS.js";
20
+ } from "./chunk-RRXRLHIE.js";
21
+ import "./chunk-JXZS56VW.js";
22
22
  import "./chunk-D6JWYJ4P.js";
23
- import "./chunk-XJETIO4K.js";
24
- import "./chunk-X5B3OS5I.js";
23
+ import "./chunk-NJ5OXOTN.js";
24
+ import "./chunk-N6XI5KXL.js";
25
25
  import "./chunk-DD67JWTN.js";
26
26
  import "./chunk-2UG25RMK.js";
27
- import "./chunk-RZTRWN2V.js";
27
+ import "./chunk-4H5WO4H3.js";
28
28
  import "./chunk-NSTQ6QKD.js";
29
29
  import "./chunk-KGZBYWZ3.js";
30
30
  import {
31
31
  globalAgentCwd
32
- } from "./chunk-EQNRWDLN.js";
32
+ } from "./chunk-KK63BFYN.js";
33
33
  import "./chunk-WWUABK6B.js";
34
34
  import "./chunk-FJZWM2ON.js";
35
35
  export {
@@ -15,19 +15,19 @@ import {
15
15
  orchestratorSessionPoisonedByBuiltins,
16
16
  slackCoordinatorSourceRef,
17
17
  takenTeamSlugsForOrchestration
18
- } from "./chunk-S2OEFXST.js";
19
- import "./chunk-7H2CVVLF.js";
18
+ } from "./chunk-5UN5C5WP.js";
19
+ import "./chunk-O3UAQAYA.js";
20
20
  import "./chunk-6K64FJDD.js";
21
21
  import "./chunk-2P4XKWV2.js";
22
- import "./chunk-I5NC7DWO.js";
22
+ import "./chunk-P3DCZRER.js";
23
23
  import "./chunk-WDRMZKVB.js";
24
24
  import "./chunk-JT7R45JB.js";
25
- import "./chunk-4VGCG2HV.js";
26
- import "./chunk-7J72QJOM.js";
25
+ import "./chunk-3AJUH66R.js";
26
+ import "./chunk-224IXQOM.js";
27
27
  import "./chunk-77WWLBCI.js";
28
28
  import {
29
29
  globalAgentCwd
30
- } from "./chunk-WFUDY6PC.js";
30
+ } from "./chunk-A4JGXX2F.js";
31
31
  import "./chunk-QVN2WOKJ.js";
32
32
  import "./chunk-4TR3HZFT.js";
33
33
  export {