@sideboard-ai/core 0.1.143 → 0.1.145

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 (31) hide show
  1. package/dist/{agents-OEEOIKUB.js → agents-4WOO4WN4.js} +4 -4
  2. package/dist/{agents-E5AAMHDY.js → agents-VFBNZHI4.js} +4 -4
  3. package/dist/{chunk-OHWN4JEL.js → chunk-2C5RE7K4.js} +1 -1
  4. package/dist/{chunk-EAP4SMR3.js → chunk-335KQKWX.js} +68 -18
  5. package/dist/{chunk-KP4OJUPH.js → chunk-3EMJ5LVV.js} +68 -18
  6. package/dist/{chunk-HC5N3BDL.js → chunk-3UD2LW4P.js} +2 -2
  7. package/dist/{chunk-UG5N7ET3.js → chunk-DN7UA3UT.js} +1 -1
  8. package/dist/{chunk-R2W7A2UO.js → chunk-G3KLNP2B.js} +2 -2
  9. package/dist/{chunk-O3JEC2UJ.js → chunk-JSYIBLBK.js} +77 -8
  10. package/dist/{chunk-4D4PEBGB.js → chunk-LWRNRMYY.js} +2 -2
  11. package/dist/{chunk-4Q45TLZ5.js → chunk-QS5JJ2IM.js} +77 -8
  12. package/dist/{chunk-CG25RYQQ.js → chunk-TTJ6EYZC.js} +3 -3
  13. package/dist/{chunk-VHTIHOHE.js → chunk-UJWGZM4K.js} +3 -3
  14. package/dist/{chunk-FADNFPZO.js → chunk-XUYIJY6D.js} +2 -2
  15. package/dist/{coordinator-prompt-2LD3C74O.js → coordinator-prompt-J2WBXGLP.js} +2 -2
  16. package/dist/{coordinator-prompt-FBX7Y4EM.js → coordinator-prompt-JSX22ULD.js} +2 -2
  17. package/dist/{global-workspace-NG7SU3GV.js → global-workspace-6WR7OGMI.js} +3 -3
  18. package/dist/{global-workspace-OCV77UYF.js → global-workspace-AQESFS7I.js} +3 -3
  19. package/dist/index.cjs +140 -12
  20. package/dist/index.d.cts +20 -1
  21. package/dist/index.d.ts +20 -1
  22. package/dist/index.js +10 -6
  23. package/dist/mcp/run-stdio.cjs +136 -12
  24. package/dist/mcp/run-stdio.js +6 -6
  25. package/dist/{orchestrator-TDJZKQPT.js → orchestrator-WWQBBIPP.js} +6 -6
  26. package/dist/{orchestrator-VIFXOHF4.js → orchestrator-XPGJV7JK.js} +6 -6
  27. package/dist/{workspaces-4FUQW5LD.js → workspaces-V3RNE5ZX.js} +4 -4
  28. package/dist/{workspaces-PU5YHQ7Z.js → workspaces-WALT3MJB.js} +4 -4
  29. package/dist/{worktree-GKLPPNWR.js → worktree-3NLPMA7K.js} +5 -1
  30. package/dist/{worktree-Z22HTSCU.js → worktree-TUZX7F7P.js} +5 -1
  31. package/package.json +1 -1
@@ -2359,6 +2359,32 @@ async function listWorktrees(repoPath) {
2359
2359
  if (current) entries.push(current);
2360
2360
  return entries;
2361
2361
  }
2362
+ async function countUnpushedVsOrigin(worktreePath) {
2363
+ const head = await git(["rev-parse", "--abbrev-ref", "HEAD"], worktreePath, {
2364
+ reject: false
2365
+ });
2366
+ const branch = head.stdout.trim();
2367
+ if (branch && branch !== "HEAD") {
2368
+ const remote = await git(
2369
+ ["rev-list", "--count", `origin/${branch}..HEAD`],
2370
+ worktreePath,
2371
+ { reject: false }
2372
+ );
2373
+ if (remote.exitCode === 0) {
2374
+ const n = Number(remote.stdout.trim());
2375
+ return Number.isFinite(n) ? n : 1;
2376
+ }
2377
+ const all = await git(["rev-list", "--count", "HEAD"], worktreePath, {
2378
+ reject: false
2379
+ });
2380
+ if (all.exitCode === 0) {
2381
+ const n = Number(all.stdout.trim());
2382
+ if (Number.isFinite(n) && n > 0) return n;
2383
+ }
2384
+ return 1;
2385
+ }
2386
+ return 1;
2387
+ }
2362
2388
  async function isDirty(worktreePath) {
2363
2389
  const { stdout } = await git(["status", "--porcelain"], worktreePath);
2364
2390
  for (const line of stdout.split("\n")) {
@@ -2422,6 +2448,54 @@ async function pushBranch(worktreePath, branchName) {
2422
2448
  const httpsErr = (basicPush.stderr || bearer.stderr || bearer.stdout).trim();
2423
2449
  throw new Error(httpsErr || sshErr || `git push origin ${branchName} failed`);
2424
2450
  }
2451
+ async function runPrReady(cwd, selector, slug) {
2452
+ const readyArgs = ["pr", "ready", selector];
2453
+ if (slug) readyArgs.push("--repo", slug);
2454
+ const ready = await gh(readyArgs, cwd, { reject: false });
2455
+ if (ready.exitCode !== 0) {
2456
+ throw new Error(
2457
+ ready.stderr.trim() || ready.stdout.trim() || "Could not mark draft pull request as ready"
2458
+ );
2459
+ }
2460
+ }
2461
+ async function markPrReady(cwd, selector) {
2462
+ const slug = await resolveGithubRepoSlug(cwd);
2463
+ const viewArgs = ["pr", "view", selector, "--json", "url,state,isDraft"];
2464
+ if (slug) viewArgs.push("--repo", slug);
2465
+ const before = await gh(viewArgs, cwd, { reject: false });
2466
+ if (before.exitCode !== 0 || !before.stdout.trim()) {
2467
+ throw new Error(before.stderr.trim() || "Could not load pull request");
2468
+ }
2469
+ let url = "";
2470
+ let state = "";
2471
+ let isDraft = false;
2472
+ try {
2473
+ const parsed = JSON.parse(before.stdout);
2474
+ url = String(parsed.url ?? "");
2475
+ state = String(parsed.state ?? "").toUpperCase();
2476
+ isDraft = Boolean(parsed.isDraft);
2477
+ } catch {
2478
+ throw new Error("Could not parse pull request details");
2479
+ }
2480
+ if (state === "MERGED" || state === "CLOSED") {
2481
+ return { url, state, isDraft: false };
2482
+ }
2483
+ if (isDraft) {
2484
+ if (await isDirty(cwd)) {
2485
+ throw new Error(
2486
+ "Commit and push local work before marking the pull request ready for review."
2487
+ );
2488
+ }
2489
+ const unpushed = await countUnpushedVsOrigin(cwd);
2490
+ if (unpushed > 0) {
2491
+ throw new Error(
2492
+ "Push this branch to origin before marking the pull request ready for review."
2493
+ );
2494
+ }
2495
+ await runPrReady(cwd, selector, slug);
2496
+ }
2497
+ return { url, state: state || "OPEN", isDraft: false };
2498
+ }
2425
2499
  async function mergePr(cwd, selector, opts) {
2426
2500
  const slug = await resolveGithubRepoSlug(cwd);
2427
2501
  const viewArgs = ["pr", "view", selector, "--json", "url,state,isDraft,number"];
@@ -2456,14 +2530,7 @@ async function mergePr(cwd, selector, opts) {
2456
2530
  return { url, state: "MERGED" };
2457
2531
  }
2458
2532
  if (isDraft) {
2459
- const readyArgs = ["pr", "ready", selector];
2460
- if (slug) readyArgs.push("--repo", slug);
2461
- const ready = await gh(readyArgs, cwd, { reject: false });
2462
- if (ready.exitCode !== 0) {
2463
- throw new Error(
2464
- ready.stderr.trim() || ready.stdout.trim() || "Could not mark draft pull request as ready"
2465
- );
2466
- }
2533
+ await runPrReady(cwd, selector, slug);
2467
2534
  }
2468
2535
  const method = opts?.method ?? "squash";
2469
2536
  const mergeFlag = method === "rebase" ? "--rebase" : method === "merge" ? "--merge" : "--squash";
@@ -2672,11 +2739,13 @@ export {
2672
2739
  createExistingBranchWorktree,
2673
2740
  removeWorktree,
2674
2741
  listWorktrees,
2742
+ countUnpushedVsOrigin,
2675
2743
  isDirty,
2676
2744
  isSideboardScratchPath,
2677
2745
  currentBranch,
2678
2746
  commitAll,
2679
2747
  pushBranch,
2748
+ markPrReady,
2680
2749
  mergePr,
2681
2750
  createOrUpdatePr,
2682
2751
  suggestSlug,
@@ -11,13 +11,13 @@ import {
11
11
  } from "./chunk-S42XV45P.js";
12
12
  import {
13
13
  isOrchestratorThread
14
- } from "./chunk-FADNFPZO.js";
14
+ } from "./chunk-XUYIJY6D.js";
15
15
  import {
16
16
  codexUnattendedGitConfigArgs,
17
17
  mergeAgentGitAuthEnv,
18
18
  resolveAgentGitAuthEnv,
19
19
  resolveCodexGitWritableRoots
20
- } from "./chunk-4Q45TLZ5.js";
20
+ } from "./chunk-QS5JJ2IM.js";
21
21
  import {
22
22
  enrichPathWithNpmGlobalBin,
23
23
  isConductorBundledCli,
@@ -2085,7 +2085,7 @@ var claudeAdapter = {
2085
2085
  );
2086
2086
  }
2087
2087
  const mode = permissionMode(thread);
2088
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-OCV77UYF.js");
2088
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-AQESFS7I.js");
2089
2089
  const isOrchestrator = isOrchestratorThread2(thread);
2090
2090
  const injectedServers = await buildInjectedMcpServers({
2091
2091
  includeSideboard: true,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-M267JPEA.js";
10
10
  import {
11
11
  isOrchestratorThread
12
- } from "./chunk-R2W7A2UO.js";
12
+ } from "./chunk-G3KLNP2B.js";
13
13
  import {
14
14
  applyAgentRunnerHeapEnv,
15
15
  applyNodeLaunch,
@@ -28,7 +28,7 @@ import {
28
28
  mergeAgentGitAuthEnv,
29
29
  resolveAgentGitAuthEnv,
30
30
  resolveCodexGitWritableRoots
31
- } from "./chunk-O3JEC2UJ.js";
31
+ } from "./chunk-JSYIBLBK.js";
32
32
  import {
33
33
  claudeChromeEnabled,
34
34
  loadAppSettings,
@@ -1767,7 +1767,7 @@ var claudeAdapter = {
1767
1767
  );
1768
1768
  }
1769
1769
  const mode = permissionMode(thread);
1770
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-NG7SU3GV.js");
1770
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-6WR7OGMI.js");
1771
1771
  const isOrchestrator = isOrchestratorThread2(thread);
1772
1772
  const injectedServers = await buildInjectedMcpServers({
1773
1773
  includeSideboard: true,
@@ -2,12 +2,12 @@
2
2
 
3
3
  import {
4
4
  ensureGlobalCoordinatorCwd
5
- } from "./chunk-OHWN4JEL.js";
5
+ } from "./chunk-2C5RE7K4.js";
6
6
  import {
7
7
  allocateTeamName,
8
8
  takenSlugsFromThread,
9
9
  teamSlugFromName
10
- } from "./chunk-4Q45TLZ5.js";
10
+ } from "./chunk-QS5JJ2IM.js";
11
11
  import {
12
12
  ATTACHMENTS_DIR,
13
13
  attachmentsGitignoreBody
@@ -7,8 +7,8 @@ import {
7
7
  enrichWorkspacesWithGithub,
8
8
  ensureGlobalCoordinatorCwd,
9
9
  formatWorkspaceInventory
10
- } from "./chunk-UG5N7ET3.js";
11
- import "./chunk-O3JEC2UJ.js";
10
+ } from "./chunk-DN7UA3UT.js";
11
+ import "./chunk-JSYIBLBK.js";
12
12
  import "./chunk-FKOIHGKV.js";
13
13
  import "./chunk-I77RYPOH.js";
14
14
  import "./chunk-4TR3HZFT.js";
@@ -9,8 +9,8 @@ import {
9
9
  enrichWorkspacesWithGithub,
10
10
  ensureGlobalCoordinatorCwd,
11
11
  formatWorkspaceInventory
12
- } from "./chunk-OHWN4JEL.js";
13
- import "./chunk-4Q45TLZ5.js";
12
+ } from "./chunk-2C5RE7K4.js";
13
+ import "./chunk-QS5JJ2IM.js";
14
14
  import "./chunk-B3SJXYIJ.js";
15
15
  import "./chunk-EUXOHTUK.js";
16
16
  import "./chunk-KPIYENTF.js";
@@ -15,9 +15,9 @@ import {
15
15
  orchestratorSessionPoisonedByBuiltins,
16
16
  slackCoordinatorSourceRef,
17
17
  takenTeamSlugsForOrchestration
18
- } from "./chunk-R2W7A2UO.js";
19
- import "./chunk-UG5N7ET3.js";
20
- import "./chunk-O3JEC2UJ.js";
18
+ } from "./chunk-G3KLNP2B.js";
19
+ import "./chunk-DN7UA3UT.js";
20
+ import "./chunk-JSYIBLBK.js";
21
21
  import "./chunk-FKOIHGKV.js";
22
22
  import "./chunk-I77RYPOH.js";
23
23
  import "./chunk-4TR3HZFT.js";
@@ -17,9 +17,9 @@ import {
17
17
  orchestratorSessionPoisonedByBuiltins,
18
18
  slackCoordinatorSourceRef,
19
19
  takenTeamSlugsForOrchestration
20
- } from "./chunk-FADNFPZO.js";
21
- import "./chunk-OHWN4JEL.js";
22
- import "./chunk-4Q45TLZ5.js";
20
+ } from "./chunk-XUYIJY6D.js";
21
+ import "./chunk-2C5RE7K4.js";
22
+ import "./chunk-QS5JJ2IM.js";
23
23
  import "./chunk-B3SJXYIJ.js";
24
24
  import "./chunk-EUXOHTUK.js";
25
25
  import "./chunk-KPIYENTF.js";
package/dist/index.cjs CHANGED
@@ -4945,6 +4945,7 @@ __export(worktree_exports, {
4945
4945
  canonicalizeRepoPath: () => canonicalizeRepoPath,
4946
4946
  collectTakenTeamSlugs: () => collectTakenTeamSlugs,
4947
4947
  commitAll: () => commitAll,
4948
+ countUnpushedVsOrigin: () => countUnpushedVsOrigin,
4948
4949
  createExistingBranchWorktree: () => createExistingBranchWorktree,
4949
4950
  createOrUpdatePr: () => createOrUpdatePr,
4950
4951
  createThreadWorktree: () => createThreadWorktree,
@@ -4968,6 +4969,7 @@ __export(worktree_exports, {
4968
4969
  listPrs: () => listPrs,
4969
4970
  listWorktrees: () => listWorktrees,
4970
4971
  lookupSoccerTeam: () => lookupSoccerTeam,
4972
+ markPrReady: () => markPrReady,
4971
4973
  mergePr: () => mergePr,
4972
4974
  normalizeWorktreePath: () => normalizeWorktreePath,
4973
4975
  originGhRepoEnv: () => originGhRepoEnv,
@@ -5892,6 +5894,32 @@ async function listWorktrees(repoPath) {
5892
5894
  if (current) entries.push(current);
5893
5895
  return entries;
5894
5896
  }
5897
+ async function countUnpushedVsOrigin(worktreePath) {
5898
+ const head = await git(["rev-parse", "--abbrev-ref", "HEAD"], worktreePath, {
5899
+ reject: false
5900
+ });
5901
+ const branch = head.stdout.trim();
5902
+ if (branch && branch !== "HEAD") {
5903
+ const remote = await git(
5904
+ ["rev-list", "--count", `origin/${branch}..HEAD`],
5905
+ worktreePath,
5906
+ { reject: false }
5907
+ );
5908
+ if (remote.exitCode === 0) {
5909
+ const n = Number(remote.stdout.trim());
5910
+ return Number.isFinite(n) ? n : 1;
5911
+ }
5912
+ const all = await git(["rev-list", "--count", "HEAD"], worktreePath, {
5913
+ reject: false
5914
+ });
5915
+ if (all.exitCode === 0) {
5916
+ const n = Number(all.stdout.trim());
5917
+ if (Number.isFinite(n) && n > 0) return n;
5918
+ }
5919
+ return 1;
5920
+ }
5921
+ return 1;
5922
+ }
5895
5923
  async function isDirty(worktreePath) {
5896
5924
  const { stdout } = await git(["status", "--porcelain"], worktreePath);
5897
5925
  for (const line of stdout.split("\n")) {
@@ -5955,6 +5983,54 @@ async function pushBranch(worktreePath, branchName) {
5955
5983
  const httpsErr = (basicPush.stderr || bearer.stderr || bearer.stdout).trim();
5956
5984
  throw new Error(httpsErr || sshErr || `git push origin ${branchName} failed`);
5957
5985
  }
5986
+ async function runPrReady(cwd, selector, slug) {
5987
+ const readyArgs = ["pr", "ready", selector];
5988
+ if (slug) readyArgs.push("--repo", slug);
5989
+ const ready = await gh(readyArgs, cwd, { reject: false });
5990
+ if (ready.exitCode !== 0) {
5991
+ throw new Error(
5992
+ ready.stderr.trim() || ready.stdout.trim() || "Could not mark draft pull request as ready"
5993
+ );
5994
+ }
5995
+ }
5996
+ async function markPrReady(cwd, selector) {
5997
+ const slug = await resolveGithubRepoSlug(cwd);
5998
+ const viewArgs = ["pr", "view", selector, "--json", "url,state,isDraft"];
5999
+ if (slug) viewArgs.push("--repo", slug);
6000
+ const before = await gh(viewArgs, cwd, { reject: false });
6001
+ if (before.exitCode !== 0 || !before.stdout.trim()) {
6002
+ throw new Error(before.stderr.trim() || "Could not load pull request");
6003
+ }
6004
+ let url = "";
6005
+ let state = "";
6006
+ let isDraft = false;
6007
+ try {
6008
+ const parsed = JSON.parse(before.stdout);
6009
+ url = String(parsed.url ?? "");
6010
+ state = String(parsed.state ?? "").toUpperCase();
6011
+ isDraft = Boolean(parsed.isDraft);
6012
+ } catch {
6013
+ throw new Error("Could not parse pull request details");
6014
+ }
6015
+ if (state === "MERGED" || state === "CLOSED") {
6016
+ return { url, state, isDraft: false };
6017
+ }
6018
+ if (isDraft) {
6019
+ if (await isDirty(cwd)) {
6020
+ throw new Error(
6021
+ "Commit and push local work before marking the pull request ready for review."
6022
+ );
6023
+ }
6024
+ const unpushed = await countUnpushedVsOrigin(cwd);
6025
+ if (unpushed > 0) {
6026
+ throw new Error(
6027
+ "Push this branch to origin before marking the pull request ready for review."
6028
+ );
6029
+ }
6030
+ await runPrReady(cwd, selector, slug);
6031
+ }
6032
+ return { url, state: state || "OPEN", isDraft: false };
6033
+ }
5958
6034
  async function mergePr(cwd, selector, opts) {
5959
6035
  const slug = await resolveGithubRepoSlug(cwd);
5960
6036
  const viewArgs = ["pr", "view", selector, "--json", "url,state,isDraft,number"];
@@ -5989,14 +6065,7 @@ async function mergePr(cwd, selector, opts) {
5989
6065
  return { url, state: "MERGED" };
5990
6066
  }
5991
6067
  if (isDraft) {
5992
- const readyArgs = ["pr", "ready", selector];
5993
- if (slug) readyArgs.push("--repo", slug);
5994
- const ready = await gh(readyArgs, cwd, { reject: false });
5995
- if (ready.exitCode !== 0) {
5996
- throw new Error(
5997
- ready.stderr.trim() || ready.stdout.trim() || "Could not mark draft pull request as ready"
5998
- );
5999
- }
6068
+ await runPrReady(cwd, selector, slug);
6000
6069
  }
6001
6070
  const method = opts?.method ?? "squash";
6002
6071
  const mergeFlag = method === "rebase" ? "--rebase" : method === "merge" ? "--merge" : "--squash";
@@ -15181,6 +15250,21 @@ var init_reconcile_heal = __esm({
15181
15250
  }
15182
15251
  });
15183
15252
 
15253
+ // src/orchestrator/setup-last-error.ts
15254
+ function shouldStampSetupLastError(opts) {
15255
+ if (opts.turnInFlight) return false;
15256
+ if (opts.status === "running") return false;
15257
+ return true;
15258
+ }
15259
+ function isStaleLastErrorDuringTurn(err) {
15260
+ return Boolean(err?.trim());
15261
+ }
15262
+ var init_setup_last_error = __esm({
15263
+ "src/orchestrator/setup-last-error.ts"() {
15264
+ "use strict";
15265
+ }
15266
+ });
15267
+
15184
15268
  // src/threads/fork-worktree.ts
15185
15269
  function requireThread2(idOrRef) {
15186
15270
  const thread = findThreadByRef(idOrRef) ?? null;
@@ -18085,6 +18169,7 @@ var init_orchestrator = __esm({
18085
18169
  init_repo_git_lock();
18086
18170
  init_turn_live();
18087
18171
  init_reconcile_heal();
18172
+ init_setup_last_error();
18088
18173
  init_request_review();
18089
18174
  init_fork_worktree();
18090
18175
  init_quota_failover();
@@ -18463,6 +18548,13 @@ var init_orchestrator = __esm({
18463
18548
  const message = err instanceof Error ? err.message : String(err);
18464
18549
  if (/no setup script/i.test(message)) return;
18465
18550
  if (/already running/i.test(message)) return;
18551
+ const live = readThread(threadId);
18552
+ if (!shouldStampSetupLastError({
18553
+ turnInFlight: this.activeTurns.has(threadId) || this.startingTurns.has(threadId),
18554
+ status: live?.status
18555
+ })) {
18556
+ return;
18557
+ }
18466
18558
  updateThread(threadId, {
18467
18559
  lastError: `Setup failed: ${message}`
18468
18560
  });
@@ -18809,7 +18901,7 @@ var init_orchestrator = __esm({
18809
18901
  )) {
18810
18902
  this.lastReconcileHealAt.set(threadId, now);
18811
18903
  const live = readThread(threadId);
18812
- if (live?.lastError?.includes("reconciled on startup") && (this.activeTurns.has(threadId) || this.startingTurns.has(threadId))) {
18904
+ if (isStaleLastErrorDuringTurn(live?.lastError) && (this.activeTurns.has(threadId) || this.startingTurns.has(threadId))) {
18813
18905
  setStatus(threadId, "running");
18814
18906
  this.emit({ type: "status_changed", threadId, status: "running" });
18815
18907
  }
@@ -19266,9 +19358,15 @@ var init_orchestrator = __esm({
19266
19358
  );
19267
19359
  }
19268
19360
  if (setup.exitCode !== 0 && setup.exitCode !== null) {
19269
- updateThread(thread.id, {
19270
- lastError: `Setup exited ${setup.exitCode}`
19271
- });
19361
+ const live = readThread(thread.id);
19362
+ if (shouldStampSetupLastError({
19363
+ turnInFlight: this.activeTurns.has(thread.id) || this.startingTurns.has(thread.id),
19364
+ status: live?.status
19365
+ })) {
19366
+ updateThread(thread.id, {
19367
+ lastError: `Setup exited ${setup.exitCode}`
19368
+ });
19369
+ }
19272
19370
  }
19273
19371
  this.emit({ type: "setup_finished", threadId: thread.id, exitCode: setup.exitCode });
19274
19372
  return { exitCode: setup.exitCode, source: setup.source };
@@ -19494,6 +19592,32 @@ var init_orchestrator = __esm({
19494
19592
  }
19495
19593
  return result;
19496
19594
  }
19595
+ async markPrReady(threadRef) {
19596
+ const { thread, selectors, cwd } = await this.withPrSelector(threadRef);
19597
+ this.assertNotGlobal(thread, "Ready for review");
19598
+ const selector = selectors[0];
19599
+ if (!selector) throw new Error("No pull request linked to this thread");
19600
+ const result = await markPrReady(cwd, selector);
19601
+ const meta = await getPrMeta(cwd, selector);
19602
+ if (meta) {
19603
+ await this.persistPrMetaAndMaybeArchive(thread, { ...meta, isDraft: false });
19604
+ return { url: meta.url || result.url, state: meta.state || result.state, isDraft: false };
19605
+ }
19606
+ await this.persistPrMetaAndMaybeArchive(thread, {
19607
+ number: 0,
19608
+ title: thread.prTitle ?? thread.title,
19609
+ url: result.url || thread.prUrl || "",
19610
+ state: result.state || "OPEN",
19611
+ isDraft: false,
19612
+ reviewDecision: null,
19613
+ baseRefName: "",
19614
+ headRefName: "",
19615
+ isInMergeQueue: false,
19616
+ mergeable: null,
19617
+ mergeStateStatus: null
19618
+ });
19619
+ return { ...result, isDraft: false };
19620
+ }
19497
19621
  async mergePr(threadRef) {
19498
19622
  const { thread, selectors, cwd } = await this.withPrSelector(threadRef);
19499
19623
  this.assertNotGlobal(thread, "Merge PR");
@@ -20297,6 +20421,7 @@ __export(index_exports, {
20297
20421
  coordinatorTurnReminder: () => coordinatorTurnReminder,
20298
20422
  copyConfiguredFiles: () => copyConfiguredFiles,
20299
20423
  countCacheControlBlocks: () => countCacheControlBlocks,
20424
+ countUnpushedVsOrigin: () => countUnpushedVsOrigin,
20300
20425
  cowboyModeEnabled: () => cowboyModeEnabled,
20301
20426
  createAbleTimeTask: () => createAbleTimeTask,
20302
20427
  createChatTab: () => createChatTab,
@@ -20566,6 +20691,7 @@ __export(index_exports, {
20566
20691
  loginAgent: () => loginAgent,
20567
20692
  lookupSoccerTeam: () => lookupSoccerTeam,
20568
20693
  mapAbleTimeTask: () => mapAbleTimeTask,
20694
+ markPrReady: () => markPrReady,
20569
20695
  maxConcurrentAgents: () => maxConcurrentAgents,
20570
20696
  maybeCompactContext: () => maybeCompactContext,
20571
20697
  mcpAllowTools: () => mcpAllowTools,
@@ -26883,6 +27009,7 @@ init_outbound_watch();
26883
27009
  coordinatorTurnReminder,
26884
27010
  copyConfiguredFiles,
26885
27011
  countCacheControlBlocks,
27012
+ countUnpushedVsOrigin,
26886
27013
  cowboyModeEnabled,
26887
27014
  createAbleTimeTask,
26888
27015
  createChatTab,
@@ -27152,6 +27279,7 @@ init_outbound_watch();
27152
27279
  loginAgent,
27153
27280
  lookupSoccerTeam,
27154
27281
  mapAbleTimeTask,
27282
+ markPrReady,
27155
27283
  maxConcurrentAgents,
27156
27284
  maybeCompactContext,
27157
27285
  mcpAllowTools,
package/dist/index.d.cts CHANGED
@@ -1674,6 +1674,8 @@ declare function listWorktrees(repoPath: string): Promise<Array<{
1674
1674
  path: string;
1675
1675
  branch: string | null;
1676
1676
  }>>;
1677
+ /** Commits on HEAD not yet on `origin/<branch>`. Unknown / never-pushed counts as ahead. */
1678
+ declare function countUnpushedVsOrigin(worktreePath: string): Promise<number>;
1677
1679
  declare function isDirty(worktreePath: string): Promise<boolean>;
1678
1680
  /**
1679
1681
  * Local workspace scratch (`.context/attachments`, legacy `.sideboard/attachments`).
@@ -1683,6 +1685,12 @@ declare function isSideboardScratchPath(relativePath: string): boolean;
1683
1685
  declare function currentBranch(worktreePath: string): Promise<string>;
1684
1686
  declare function commitAll(worktreePath: string, message: string): Promise<boolean>;
1685
1687
  declare function pushBranch(worktreePath: string, branchName: string): Promise<void>;
1688
+ /** Mark a draft pull request ready for review (`gh pr ready`). Idempotent. */
1689
+ declare function markPrReady(cwd: string, selector: string): Promise<{
1690
+ url: string;
1691
+ state: string;
1692
+ isDraft: boolean;
1693
+ }>;
1686
1694
  /** Merge an open pull request.
1687
1695
  * When the worktree is on a GitHub PR stack, uses `gh stack merge` (atomic through that PR).
1688
1696
  * Otherwise: draft → ready, then `gh pr merge` (squash by default). */
@@ -3704,6 +3712,11 @@ declare class Orchestrator {
3704
3712
  draft?: boolean;
3705
3713
  web?: boolean;
3706
3714
  }): Promise<LandResult>;
3715
+ markPrReady(threadRef: string): Promise<{
3716
+ url: string;
3717
+ state: string;
3718
+ isDraft: boolean;
3719
+ }>;
3707
3720
  mergePr(threadRef: string): Promise<{
3708
3721
  url: string;
3709
3722
  state: string;
@@ -4665,6 +4678,12 @@ interface IpcApi {
4665
4678
  draft?: boolean;
4666
4679
  web?: boolean;
4667
4680
  }): Promise<LandResult>;
4681
+ /** Mark the thread's linked draft PR ready for review (`gh pr ready`). */
4682
+ markPrReady(threadRef: string): Promise<{
4683
+ url: string;
4684
+ state: string;
4685
+ isDraft: boolean;
4686
+ }>;
4668
4687
  /** Merge the thread's linked PR on GitHub (`gh pr merge`). */
4669
4688
  mergePr(threadRef: string): Promise<{
4670
4689
  url: string;
@@ -5446,4 +5465,4 @@ declare function pollSlackOutboundWatches(opts?: {
5446
5465
  now?: number;
5447
5466
  }): Promise<void>;
5448
5467
 
5449
- export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentInstructionFile, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type ExpandResult, FAMOUS_SOCCER_TEAMS, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearComment, type LinearIssue, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedReviewGuidelines, type ReviewGuidelinesSource, type RunMode, type RunScript, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildPastedTextAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueSourceLabel, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearIssues, listLinearIssuesDirect, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toAbleTimeIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, turnCostUsdFromCursorUsage, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withAgentInstructions, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };
5468
+ export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentInstructionFile, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type ExpandResult, FAMOUS_SOCCER_TEAMS, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearComment, type LinearIssue, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedReviewGuidelines, type ReviewGuidelinesSource, type RunMode, type RunScript, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildPastedTextAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, countUnpushedVsOrigin, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueSourceLabel, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearIssues, listLinearIssuesDirect, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, markPrReady, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toAbleTimeIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, turnCostUsdFromCursorUsage, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withAgentInstructions, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };