@sideboard-ai/core 0.1.314 → 0.1.316

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 (59) hide show
  1. package/dist/{abletime-T5YSJLNZ.js → abletime-NZ2ABWAL.js} +4 -4
  2. package/dist/{abletime-SJUVZVRU.js → abletime-TKAFNXCM.js} +4 -4
  3. package/dist/{abletime-oauth-73TFJME4.js → abletime-oauth-CBFFBINA.js} +3 -3
  4. package/dist/{abletime-oauth-2TOOZ2FN.js → abletime-oauth-S4AXA4WR.js} +3 -3
  5. package/dist/{abletime-rest-PNUGH2FS.js → abletime-rest-NSOP72AI.js} +3 -3
  6. package/dist/{abletime-rest-5TDRIFEV.js → abletime-rest-ORBELZQO.js} +3 -3
  7. package/dist/{agents-KIC6CNXF.js → agents-5XJ7EHGU.js} +6 -6
  8. package/dist/{agents-S7VBS5JL.js → agents-Y3M3EKLY.js} +6 -6
  9. package/dist/{app-settings-CC65VPBL.js → app-settings-CZVFMOI5.js} +3 -1
  10. package/dist/{app-settings-DZ5AY7N5.js → app-settings-RQAFJZCD.js} +3 -1
  11. package/dist/{chunk-6EGQPMSR.js → chunk-4ISF5XUA.js} +47 -26
  12. package/dist/{chunk-EGTCXNQM.js → chunk-53OCOGND.js} +2 -2
  13. package/dist/{chunk-DLGGLV2M.js → chunk-5CTG5W7S.js} +2 -2
  14. package/dist/{chunk-YK77HB3W.js → chunk-7BLIY2DD.js} +45 -25
  15. package/dist/{chunk-CFTOKVQN.js → chunk-7SCVGGF6.js} +5 -5
  16. package/dist/{chunk-7UP4D5XI.js → chunk-ATSZXRFQ.js} +6 -5
  17. package/dist/{chunk-BIPXOHZI.js → chunk-BPBDGJ43.js} +2 -2
  18. package/dist/{chunk-CW4FIIDE.js → chunk-CCUGIVYN.js} +3 -3
  19. package/dist/{chunk-HG25AYBV.js → chunk-CHUPIJP7.js} +14 -0
  20. package/dist/{chunk-5QYCCXXQ.js → chunk-DNWO6PQJ.js} +6 -5
  21. package/dist/{chunk-JWW66PO3.js → chunk-ELBK34TY.js} +5 -5
  22. package/dist/{chunk-A45QMSVB.js → chunk-FVTR54LY.js} +5 -5
  23. package/dist/{chunk-PHMFAU35.js → chunk-GCHSJCCX.js} +96 -64
  24. package/dist/{chunk-ZSVKUOFH.js → chunk-GFM63DTU.js} +8 -5
  25. package/dist/{chunk-OLSLE3LO.js → chunk-GXSV3X3L.js} +3 -3
  26. package/dist/{chunk-JARCAPKL.js → chunk-I5CLCWUK.js} +3 -3
  27. package/dist/{chunk-TO5UL7VN.js → chunk-MBYGWNLQ.js} +1 -1
  28. package/dist/{chunk-7DBL5AF4.js → chunk-NKVNHBDB.js} +4 -4
  29. package/dist/{chunk-U4WACWBC.js → chunk-NXNNYY3Q.js} +2 -2
  30. package/dist/{chunk-NMPQ7GIS.js → chunk-OLYNM52B.js} +2 -2
  31. package/dist/{chunk-S3KYDK6W.js → chunk-PN32Z4JL.js} +8 -5
  32. package/dist/{chunk-ZQLZ2A3I.js → chunk-S3U4HR5F.js} +2 -2
  33. package/dist/{chunk-3UDRWMIM.js → chunk-U35AHE2P.js} +14 -0
  34. package/dist/{chunk-A2YXQC65.js → chunk-U7PNCYNX.js} +96 -64
  35. package/dist/{chunk-SZ3XS2WM.js → chunk-VVV7EI6T.js} +3 -2
  36. package/dist/{chunk-6424BACS.js → chunk-VZAJVX36.js} +3 -2
  37. package/dist/{conductor-IIDQ2U24.js → conductor-CFLBKVHJ.js} +5 -5
  38. package/dist/{conductor-G6TKCMIW.js → conductor-NZ4V5CJX.js} +5 -5
  39. package/dist/{coordinator-prompt-EXJSULAR.js → coordinator-prompt-HUZC4DZ2.js} +4 -4
  40. package/dist/{coordinator-prompt-5USNNCG6.js → coordinator-prompt-SPOYUZG5.js} +4 -4
  41. package/dist/{global-workspace-ZGPIGJ6J.js → global-workspace-3NNDDTFD.js} +4 -4
  42. package/dist/{global-workspace-UDRTONQE.js → global-workspace-SK4JQBPN.js} +4 -4
  43. package/dist/index.cjs +448 -71
  44. package/dist/index.d.cts +81 -55
  45. package/dist/index.d.ts +81 -55
  46. package/dist/index.js +310 -27
  47. package/dist/mcp/run-stdio.cjs +152 -63
  48. package/dist/mcp/run-stdio.js +15 -14
  49. package/dist/{optional-cli-MLZSE6KW.js → optional-cli-EMSZBYDE.js} +3 -3
  50. package/dist/{optional-cli-SI4BCPRH.js → optional-cli-LMSRZNH4.js} +4 -4
  51. package/dist/{orchestrator-AM7VT2BD.js → orchestrator-7342RGRU.js} +9 -9
  52. package/dist/{orchestrator-V6NLIPLH.js → orchestrator-KXEPWTG5.js} +9 -9
  53. package/dist/{thread-store-HY22M5A7.js → thread-store-5OF6M6VZ.js} +1 -1
  54. package/dist/{thread-store-XMUQDO5O.js → thread-store-GOVVXQV2.js} +1 -1
  55. package/dist/{workspaces-3TTODHKN.js → workspaces-52L6NZ3P.js} +4 -4
  56. package/dist/{workspaces-TATO466L.js → workspaces-EYNZDL45.js} +4 -4
  57. package/dist/{worktree-C5VI46RZ.js → worktree-BP5ICYQ2.js} +3 -3
  58. package/dist/{worktree-FMK57ULT.js → worktree-UCOSAI7J.js} +3 -3
  59. package/package.json +1 -1
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  formatOptionalServicesDirectiveForTurn,
8
8
  formatOptionalServicesReminderForTurn
9
- } from "./chunk-TO5UL7VN.js";
9
+ } from "./chunk-MBYGWNLQ.js";
10
10
  import {
11
11
  extractPresentedPlan,
12
12
  isPresentPlanToolName,
@@ -27,7 +27,7 @@ import {
27
27
  parseSessionQuotaResetAt,
28
28
  planModeTurnInstruction,
29
29
  resolveQuotaFallbackAgent
30
- } from "./chunk-A45QMSVB.js";
30
+ } from "./chunk-FVTR54LY.js";
31
31
  import {
32
32
  REVIEW_TAB_TITLE,
33
33
  applyWorktreePkgCacheEnv,
@@ -69,7 +69,7 @@ import {
69
69
  worktreeDevProcessKey,
70
70
  worktreeRunProcessKey,
71
71
  worktreeSetupProcessKey
72
- } from "./chunk-5QYCCXXQ.js";
72
+ } from "./chunk-DNWO6PQJ.js";
73
73
  import {
74
74
  applyAgentEvent,
75
75
  clipAgentEventForPaint,
@@ -121,7 +121,7 @@ import {
121
121
  stageAbsolutePathsAsAttachments,
122
122
  stageBuffersAsAttachments,
123
123
  syncWorkspacesFromThreads
124
- } from "./chunk-S3KYDK6W.js";
124
+ } from "./chunk-PN32Z4JL.js";
125
125
  import {
126
126
  addPrStackLayer,
127
127
  allocateTeamSlug,
@@ -163,7 +163,7 @@ import {
163
163
  resolveRepoRoot,
164
164
  switchWorktreeBranch,
165
165
  withRepoGitLock
166
- } from "./chunk-DLGGLV2M.js";
166
+ } from "./chunk-5CTG5W7S.js";
167
167
  import {
168
168
  clearStaleIndexLocks,
169
169
  enrichPathWithNpmGlobalBin,
@@ -182,6 +182,7 @@ import {
182
182
  followUpBehavior,
183
183
  formatViewerContextDirective,
184
184
  formatViewerContextReminder,
185
+ getDefaultAutonomy,
185
186
  getIssueSource,
186
187
  historyMaxCount,
187
188
  historyMaxDays,
@@ -204,7 +205,7 @@ import {
204
205
  usageOnLimit,
205
206
  withTurnScopedCost,
206
207
  writeViewerContext
207
- } from "./chunk-PHMFAU35.js";
208
+ } from "./chunk-GCHSJCCX.js";
208
209
  import {
209
210
  writePrivateFile
210
211
  } from "./chunk-NSTQ6QKD.js";
@@ -241,7 +242,7 @@ import {
241
242
  worktreeNameFromPath,
242
243
  worktreeSlugForTicket,
243
244
  writeThread
244
- } from "./chunk-3UDRWMIM.js";
245
+ } from "./chunk-U35AHE2P.js";
245
246
  import {
246
247
  annotateDevAccessRuns,
247
248
  appDataDir,
@@ -506,9 +507,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
506
507
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
507
508
  );
508
509
  }
509
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-UDRTONQE.js");
510
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-SK4JQBPN.js");
510
511
  if (isGlobalThread2(thread)) {
511
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-EXJSULAR.js");
512
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-HUZC4DZ2.js");
512
513
  ensureGlobalCoordinatorCwd2(
513
514
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
514
515
  );
@@ -2010,6 +2011,22 @@ async function requireAgent(agent, opts) {
2010
2011
  return status;
2011
2012
  }
2012
2013
 
2014
+ // src/board/issue-blocked-view.ts
2015
+ function issueBlockedByIds(group) {
2016
+ const out = [];
2017
+ const seen = /* @__PURE__ */ new Set();
2018
+ for (const thread of group) {
2019
+ for (const raw of thread.issueBlockedBy ?? []) {
2020
+ const id = String(raw ?? "").trim();
2021
+ const key = id.toLowerCase();
2022
+ if (!id || seen.has(key)) continue;
2023
+ seen.add(key);
2024
+ out.push(id);
2025
+ }
2026
+ }
2027
+ return out;
2028
+ }
2029
+
2013
2030
  // src/board/pr-state.ts
2014
2031
  function isOpenPrState(prUrl, prState) {
2015
2032
  if (!prUrl?.trim()) return false;
@@ -2417,6 +2434,7 @@ function toThreadCard(group) {
2417
2434
  const thread = group[0];
2418
2435
  const withPr = group.find((t) => t.prUrl?.trim()) ?? thread;
2419
2436
  const tags = workspaceTagsFromGroup(group);
2437
+ const issueBlockedBy = issueBlockedByIds(group);
2420
2438
  return {
2421
2439
  kind: "thread",
2422
2440
  id: thread.id,
@@ -2430,6 +2448,7 @@ function toThreadCard(group) {
2430
2448
  link: `sideboard://chat/${thread.id}`,
2431
2449
  ...group.length > 1 ? { chatCount: group.length } : {},
2432
2450
  ...threadCardBlockFields(group) ?? {},
2451
+ ...issueBlockedBy.length > 0 ? { issueBlockedBy } : {},
2433
2452
  ...tags.length > 0 ? { tags } : {}
2434
2453
  };
2435
2454
  }
@@ -2506,7 +2525,7 @@ function assembleHomeBoard(input) {
2506
2525
  }
2507
2526
  return { columns, hidden, totals };
2508
2527
  }
2509
- var HOME_BOARD_AGENT_HINT = "Home is a Kanban of workspaces (one card per checkout; sibling chats on a card are separate agents). Do not create a second workspace for a ticket, PR, or named branch that already has a live checkout \u2014 create_workspace / start_board_card return that checkout (alreadyStarted) and its chats. Add another agent with fork_chat. Creating from the default branch still opens a new isolated workspace. Columns are the path to merge: New (no PR) \u2192 Draft (draft PR) \u2192 Review (open PR) \u2192 Approved (approved, not merged) \u2192 Merged. ownership=mine is PRs you authored (or WIP with no PR); ownership=reviewing is someone else's PR (or a review-requested checkout). Viewer login comes from gh, not a setting. Archive removes the card to Settings \u2192 History (list_archive to browse, restore_workspace to bring it back). Queued/running are activity on the card, not columns. blockedReason means an agent on that card is waiting on a person (the question, plan approval, or a reported block) \u2014 read it and do not send_to_chat a check-in. Orchestration chats stay in the sidebar. Do not invent status.";
2528
+ var HOME_BOARD_AGENT_HINT = "Home is a Kanban of workspaces (one card per checkout; sibling chats on a card are separate agents). Do not create a second workspace for a ticket, PR, or named branch that already has a live checkout \u2014 create_workspace / start_board_card return that checkout (alreadyStarted) and its chats. Add another agent with fork_chat. Creating from the default branch still opens a new isolated workspace. Columns are the path to merge: New (no PR) \u2192 Draft (draft PR) \u2192 Review (open PR) \u2192 Approved (approved, not merged) \u2192 Merged. ownership=mine is PRs you authored (or WIP with no PR); ownership=reviewing is someone else's PR (or a review-requested checkout). Viewer login comes from gh, not a setting. Archive removes the card to Settings \u2192 History (list_archive to browse, restore_workspace to bring it back). Queued/running are activity on the card, not columns. blockedReason means an agent on that card is waiting on a person (the question, plan approval, or a reported block) \u2014 read it and do not send_to_chat a check-in. issueBlockedBy, when present, lists issues blocking that workspace's source ticket (the tracker dependency, not a person). Orchestration chats stay in the sidebar. Do not invent status.";
2510
2529
 
2511
2530
  // src/threads/workspace-tags.ts
2512
2531
  function workspaceTagTargetRef(opts) {
@@ -2608,11 +2627,12 @@ async function createThread(input, _onSetupLine) {
2608
2627
  agent: input.agent,
2609
2628
  model: input.model,
2610
2629
  effort: input.effort,
2611
- fast: input.fast
2630
+ fast: input.fast,
2631
+ autonomy: input.autonomy
2612
2632
  });
2613
2633
  await requireAgent(resolved.agent);
2614
2634
  if (input.cowboy) {
2615
- const { cowboyModeEnabled } = await import("./app-settings-CC65VPBL.js");
2635
+ const { cowboyModeEnabled } = await import("./app-settings-CZVFMOI5.js");
2616
2636
  if (!cowboyModeEnabled()) {
2617
2637
  throw new Error(
2618
2638
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -2647,7 +2667,7 @@ async function createThread(input, _onSetupLine) {
2647
2667
  worktreePath: repoPath,
2648
2668
  repoPath,
2649
2669
  agent: resolved.agent,
2650
- autonomy: input.autonomy ?? "default",
2670
+ autonomy: resolved.autonomy,
2651
2671
  model: resolved.model,
2652
2672
  effort: resolved.effort,
2653
2673
  fast: resolved.fast,
@@ -2671,7 +2691,7 @@ async function createThread(input, _onSetupLine) {
2671
2691
  let sourceIsFork = false;
2672
2692
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
2673
2693
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
2674
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-SJUVZVRU.js");
2694
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-TKAFNXCM.js");
2675
2695
  const task = await ensureAbleTimeTask({
2676
2696
  title: title?.trim() || "Untitled work",
2677
2697
  description: input.prompt?.trim() || void 0
@@ -2761,7 +2781,7 @@ async function createThread(input, _onSetupLine) {
2761
2781
  worktreePath,
2762
2782
  repoPath,
2763
2783
  agent: resolved.agent,
2764
- autonomy: input.autonomy ?? "default",
2784
+ autonomy: resolved.autonomy,
2765
2785
  model: resolved.model,
2766
2786
  effort: resolved.effort,
2767
2787
  fast: resolved.fast,
@@ -3544,7 +3564,7 @@ async function adoptThread(input) {
3544
3564
  messages: input.messages ?? []
3545
3565
  });
3546
3566
  writeThread(thread);
3547
- const { addWorkspace: addWorkspace2 } = await import("./workspaces-TATO466L.js");
3567
+ const { addWorkspace: addWorkspace2 } = await import("./workspaces-EYNZDL45.js");
3548
3568
  await addWorkspace2(repoPath);
3549
3569
  const { ensureWorktreeSideboardIgnored } = await import("./worktree-exclude-5N2KTYIT.js");
3550
3570
  await ensureWorktreeSideboardIgnored(input.worktreePath);
@@ -3836,7 +3856,7 @@ async function openStackLayer(input, _onSetupLine) {
3836
3856
  worktreePath,
3837
3857
  repoPath,
3838
3858
  agent: input.agent,
3839
- autonomy: input.autonomy ?? "default",
3859
+ autonomy: input.autonomy ?? getDefaultAutonomy(),
3840
3860
  model: input.model ?? null,
3841
3861
  effort: input.effort ?? "high",
3842
3862
  fast: Boolean(input.fast),
@@ -6438,7 +6458,7 @@ function formatScheduledPrompt(name, prompt) {
6438
6458
  ${prompt}`;
6439
6459
  }
6440
6460
  async function defaultDeps() {
6441
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-AM7VT2BD.js");
6461
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-7342RGRU.js");
6442
6462
  const orch = getOrchestrator2();
6443
6463
  return {
6444
6464
  findThread: (id) => findThreadByRef(id),
@@ -6756,7 +6776,7 @@ var Orchestrator = class {
6756
6776
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
6757
6777
  });
6758
6778
  }
6759
- const { autoCleanupOrphansEnabled } = await import("./app-settings-CC65VPBL.js");
6779
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-CZVFMOI5.js");
6760
6780
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
6761
6781
  await cleanupOrphanWorktrees({ repoPaths });
6762
6782
  }
@@ -7150,7 +7170,7 @@ var Orchestrator = class {
7150
7170
  }
7151
7171
  await setup;
7152
7172
  if (skipSetup) return;
7153
- const { autoRunAfterSetupEnabled } = await import("./app-settings-CC65VPBL.js");
7173
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-CZVFMOI5.js");
7154
7174
  if (autoRunAfterSetupEnabled()) {
7155
7175
  try {
7156
7176
  await this.startDev(threadId);
@@ -7544,7 +7564,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
7544
7564
  }
7545
7565
  const isBrightsy = fresh.agent === "brightsy";
7546
7566
  const isOrchestration = isOrchestratorThread(fresh);
7547
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-CC65VPBL.js");
7567
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-CZVFMOI5.js");
7548
7568
  const gitAuthMode = getGithubGitAuthMode();
7549
7569
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
7550
7570
  githubSlug: await withTimeout(
@@ -8860,7 +8880,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8860
8880
  if (Object.keys(patch).length === 0) continue;
8861
8881
  updateThread(t.id, patch);
8862
8882
  }
8863
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-CC65VPBL.js");
8883
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-CZVFMOI5.js");
8864
8884
  const latest = this.requireThread(thread.id);
8865
8885
  if (!shouldAutoArchiveOnPrMerge({
8866
8886
  previousPrState: prevState || null,
@@ -9184,7 +9204,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
9184
9204
  await runArchiveScript(thread.repoPath, thread.worktreePath);
9185
9205
  } catch {
9186
9206
  }
9187
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-CC65VPBL.js");
9207
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-CZVFMOI5.js");
9188
9208
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
9189
9209
  await removeWorktree(thread.repoPath, thread.worktreePath, {
9190
9210
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -9320,7 +9340,7 @@ async function startOrchestration(opts) {
9320
9340
  sourceRef: "default",
9321
9341
  ...createOpts
9322
9342
  }).catch(async () => {
9323
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-FMK57ULT.js");
9343
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-UCOSAI7J.js");
9324
9344
  const repo = await resolveRepoRoot2(repoPath);
9325
9345
  const def = await resolveDefaultBranch2(repo);
9326
9346
  return orch.createThread({
@@ -9330,7 +9350,7 @@ async function startOrchestration(opts) {
9330
9350
  repoPath: repo
9331
9351
  });
9332
9352
  });
9333
- const { updateThread: upd } = await import("./thread-store-XMUQDO5O.js");
9353
+ const { updateThread: upd } = await import("./thread-store-GOVVXQV2.js");
9334
9354
  const updated = upd(thread.id, {
9335
9355
  sourceType: "orchestration",
9336
9356
  sourceRef: goal
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  getAbleTimeHost,
8
8
  isAbleTimeConnected
9
- } from "./chunk-PHMFAU35.js";
9
+ } from "./chunk-GCHSJCCX.js";
10
10
 
11
11
  // src/integrations/abletime-mcp.ts
12
12
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -155,7 +155,7 @@ function textsFromUnknown(value) {
155
155
  return "";
156
156
  }
157
157
  async function abletimeMcpRequest(method, params, opts) {
158
- const rawToken = opts?.token ?? await import("./abletime-oauth-2TOOZ2FN.js").then((m) => m.ensureAbleTimeAccessToken());
158
+ const rawToken = opts?.token ?? await import("./abletime-oauth-S4AXA4WR.js").then((m) => m.ensureAbleTimeAccessToken());
159
159
  if (!rawToken?.trim()) {
160
160
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
161
161
  }
@@ -226,9 +226,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
226
226
  if (!opts?.token && !isAbleTimeConnected()) {
227
227
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
228
228
  }
229
- const rawToken = opts?.token ?? await import("./abletime-oauth-2TOOZ2FN.js").then((m) => m.ensureAbleTimeAccessToken());
229
+ const rawToken = opts?.token ?? await import("./abletime-oauth-S4AXA4WR.js").then((m) => m.ensureAbleTimeAccessToken());
230
230
  if (rawToken && ableTimeUsesRest(rawToken)) {
231
- const { callAbleTimeRestTool } = await import("./abletime-rest-5TDRIFEV.js");
231
+ const { callAbleTimeRestTool } = await import("./abletime-rest-ORBELZQO.js");
232
232
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
233
233
  }
234
234
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -244,7 +244,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
244
244
  return await call();
245
245
  }
246
246
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
247
- const { callAbleTimeRestTool } = await import("./abletime-rest-5TDRIFEV.js");
247
+ const { callAbleTimeRestTool } = await import("./abletime-rest-ORBELZQO.js");
248
248
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
249
249
  }
250
250
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -8,11 +8,11 @@ import {
8
8
  isGlobalThread,
9
9
  isOrchestratorThread,
10
10
  isSlackCoordinatorThread
11
- } from "./chunk-ZSVKUOFH.js";
11
+ } from "./chunk-GFM63DTU.js";
12
12
  import {
13
13
  mergeAgentGitAuthEnv,
14
14
  resolveAgentGitAuthEnv
15
- } from "./chunk-BIPXOHZI.js";
15
+ } from "./chunk-BPBDGJ43.js";
16
16
  import {
17
17
  allocateTeamName,
18
18
  createEmptyThread,
@@ -23,7 +23,7 @@ import {
23
23
  updateThread,
24
24
  worktreeNameFromPath,
25
25
  writeThread
26
- } from "./chunk-HG25AYBV.js";
26
+ } from "./chunk-CHUPIJP7.js";
27
27
  import {
28
28
  ensureWorktreeSideboardIgnored
29
29
  } from "./chunk-2P4XKWV2.js";
@@ -43,7 +43,7 @@ import {
43
43
  import {
44
44
  assertOrchestratorCapableAgent,
45
45
  contextTokens
46
- } from "./chunk-A2YXQC65.js";
46
+ } from "./chunk-U7PNCYNX.js";
47
47
  import {
48
48
  stripNestedElectronEnv
49
49
  } from "./chunk-4TR3HZFT.js";
@@ -690,6 +690,7 @@ function worktreeBindingFrom(from) {
690
690
  prIsInMergeQueue: from.prIsInMergeQueue,
691
691
  prLabels: from.prLabels,
692
692
  prChecksFailed: from.prChecksFailed,
693
+ issueBlockedBy: from.issueBlockedBy,
693
694
  skipAutoArchiveOnMerge: from.skipAutoArchiveOnMerge,
694
695
  stackId: from.stackId,
695
696
  stackLayer: from.stackLayer,
@@ -1832,7 +1833,7 @@ var PORT_RANGE_SIZE = 10;
1832
1833
  var RECLAIM_RETRY_DELAY_MS = 40;
1833
1834
  var RECLAIM_TRIES = 8;
1834
1835
  async function killReclaimable(ports, worktreePath, signal) {
1835
- const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-IIDQ2U24.js");
1836
+ const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-CFLBKVHJ.js");
1836
1837
  if (worktreePath) killStaleWorktreeListeners2(ports, worktreePath, signal);
1837
1838
  else killListenersOnPorts2(ports);
1838
1839
  }
@@ -4,7 +4,7 @@ import {
4
4
  normalizeTakenSlug,
5
5
  normalizeWorktreePath,
6
6
  takenSlugsFromThread
7
- } from "./chunk-HG25AYBV.js";
7
+ } from "./chunk-CHUPIJP7.js";
8
8
  import {
9
9
  ensureWorktreeSideboardIgnored
10
10
  } from "./chunk-2P4XKWV2.js";
@@ -24,7 +24,7 @@ import {
24
24
  import {
25
25
  getGithubGitAuthMode,
26
26
  getGithubPat
27
- } from "./chunk-A2YXQC65.js";
27
+ } from "./chunk-U7PNCYNX.js";
28
28
  import {
29
29
  worktreesRoot
30
30
  } from "./chunk-H4UEFJRI.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DEFAULT_ABLETIME_HOST,
3
3
  normalizeAbleTimeHost
4
- } from "./chunk-JWW66PO3.js";
4
+ } from "./chunk-ELBK34TY.js";
5
5
  import {
6
6
  httpFetch
7
7
  } from "./chunk-JAT3JFOS.js";
@@ -10,7 +10,7 @@ import {
10
10
  getAbleTimeHost,
11
11
  loadAppSettings,
12
12
  saveAbleTimeConnection
13
- } from "./chunk-A2YXQC65.js";
13
+ } from "./chunk-U7PNCYNX.js";
14
14
 
15
15
  // src/integrations/abletime-oauth.ts
16
16
  import { createHash, randomBytes } from "crypto";
@@ -280,7 +280,7 @@ async function startAbleTimeOAuth(opts) {
280
280
  persistAbleTimeTokens(data, { host });
281
281
  const token = data.access_token.trim();
282
282
  try {
283
- const { getAbleTimeOrientation } = await import("./abletime-T5YSJLNZ.js");
283
+ const { getAbleTimeOrientation } = await import("./abletime-NZ2ABWAL.js");
284
284
  const orientation = await getAbleTimeOrientation({ token, host });
285
285
  return saveAbleTimeConnection({
286
286
  accessToken: token,
@@ -990,6 +990,19 @@ function normalizeRunScriptRequest(raw) {
990
990
  error: req.error ?? null
991
991
  };
992
992
  }
993
+ function sanitizeIssueBlockedBy(value) {
994
+ if (!Array.isArray(value)) return void 0;
995
+ const out = [];
996
+ const seen = /* @__PURE__ */ new Set();
997
+ for (const item of value) {
998
+ const id = String(item ?? "").trim();
999
+ const key = id.toLowerCase();
1000
+ if (!id || seen.has(key)) continue;
1001
+ seen.add(key);
1002
+ out.push(id);
1003
+ }
1004
+ return out;
1005
+ }
993
1006
  function normalizeThread(raw) {
994
1007
  return {
995
1008
  ...raw,
@@ -1014,6 +1027,7 @@ function normalizeThread(raw) {
1014
1027
  prIsInMergeQueue: Boolean(raw.prIsInMergeQueue),
1015
1028
  prLabels: Array.isArray(raw.prLabels) ? raw.prLabels : [],
1016
1029
  prChecksFailed: typeof raw.prChecksFailed === "boolean" ? raw.prChecksFailed : void 0,
1030
+ issueBlockedBy: sanitizeIssueBlockedBy(raw.issueBlockedBy),
1017
1031
  skipAutoArchiveOnMerge: Boolean(raw.skipAutoArchiveOnMerge),
1018
1032
  cowboy: Boolean(raw.cowboy),
1019
1033
  stackId: raw.stackId ?? null,
@@ -11,11 +11,11 @@ import {
11
11
  isGlobalThread,
12
12
  isOrchestratorThread,
13
13
  isSlackCoordinatorThread
14
- } from "./chunk-S3KYDK6W.js";
14
+ } from "./chunk-PN32Z4JL.js";
15
15
  import {
16
16
  mergeAgentGitAuthEnv,
17
17
  resolveAgentGitAuthEnv
18
- } from "./chunk-DLGGLV2M.js";
18
+ } from "./chunk-5CTG5W7S.js";
19
19
  import {
20
20
  ATTACHMENTS_DIR,
21
21
  DETACHED_JOBS_DIR,
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  assertOrchestratorCapableAgent,
34
34
  contextTokens
35
- } from "./chunk-PHMFAU35.js";
35
+ } from "./chunk-GCHSJCCX.js";
36
36
  import {
37
37
  stripNestedElectronEnv
38
38
  } from "./chunk-WWUABK6B.js";
@@ -46,7 +46,7 @@ import {
46
46
  updateThread,
47
47
  worktreeNameFromPath,
48
48
  writeThread
49
- } from "./chunk-3UDRWMIM.js";
49
+ } from "./chunk-U35AHE2P.js";
50
50
  import {
51
51
  findConventionSetup,
52
52
  loadRepoSettings,
@@ -665,6 +665,7 @@ function worktreeBindingFrom(from) {
665
665
  prIsInMergeQueue: from.prIsInMergeQueue,
666
666
  prLabels: from.prLabels,
667
667
  prChecksFailed: from.prChecksFailed,
668
+ issueBlockedBy: from.issueBlockedBy,
668
669
  skipAutoArchiveOnMerge: from.skipAutoArchiveOnMerge,
669
670
  stackId: from.stackId,
670
671
  stackLayer: from.stackLayer,
@@ -1702,7 +1703,7 @@ var PORT_RANGE_SIZE = 10;
1702
1703
  var RECLAIM_RETRY_DELAY_MS = 40;
1703
1704
  var RECLAIM_TRIES = 8;
1704
1705
  async function killReclaimable(ports, worktreePath, signal) {
1705
- const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-G6TKCMIW.js");
1706
+ const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-NZ4V5CJX.js");
1706
1707
  if (worktreePath) killStaleWorktreeListeners2(ports, worktreePath, signal);
1707
1708
  else killListenersOnPorts2(ports);
1708
1709
  }
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getAbleTimeHost,
6
6
  isAbleTimeConnected
7
- } from "./chunk-A2YXQC65.js";
7
+ } from "./chunk-U7PNCYNX.js";
8
8
 
9
9
  // src/integrations/abletime-mcp.ts
10
10
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -153,7 +153,7 @@ function textsFromUnknown(value) {
153
153
  return "";
154
154
  }
155
155
  async function abletimeMcpRequest(method, params, opts) {
156
- const rawToken = opts?.token ?? await import("./abletime-oauth-73TFJME4.js").then((m) => m.ensureAbleTimeAccessToken());
156
+ const rawToken = opts?.token ?? await import("./abletime-oauth-CBFFBINA.js").then((m) => m.ensureAbleTimeAccessToken());
157
157
  if (!rawToken?.trim()) {
158
158
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
159
159
  }
@@ -224,9 +224,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
224
224
  if (!opts?.token && !isAbleTimeConnected()) {
225
225
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
226
226
  }
227
- const rawToken = opts?.token ?? await import("./abletime-oauth-73TFJME4.js").then((m) => m.ensureAbleTimeAccessToken());
227
+ const rawToken = opts?.token ?? await import("./abletime-oauth-CBFFBINA.js").then((m) => m.ensureAbleTimeAccessToken());
228
228
  if (rawToken && ableTimeUsesRest(rawToken)) {
229
- const { callAbleTimeRestTool } = await import("./abletime-rest-PNUGH2FS.js");
229
+ const { callAbleTimeRestTool } = await import("./abletime-rest-NSOP72AI.js");
230
230
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
231
231
  }
232
232
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -242,7 +242,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
242
242
  return await call();
243
243
  }
244
244
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
245
- const { callAbleTimeRestTool } = await import("./abletime-rest-PNUGH2FS.js");
245
+ const { callAbleTimeRestTool } = await import("./abletime-rest-NSOP72AI.js");
246
246
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
247
247
  }
248
248
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -24,13 +24,13 @@ import {
24
24
  } from "./chunk-I5TESHDN.js";
25
25
  import {
26
26
  isOrchestratorThread
27
- } from "./chunk-S3KYDK6W.js";
27
+ } from "./chunk-PN32Z4JL.js";
28
28
  import {
29
29
  codexUnattendedGitConfigArgs,
30
30
  mergeAgentGitAuthEnv,
31
31
  resolveAgentGitAuthEnv,
32
32
  resolveCodexGitWritableRoots
33
- } from "./chunk-DLGGLV2M.js";
33
+ } from "./chunk-5CTG5W7S.js";
34
34
  import {
35
35
  githubAgentAuthReady,
36
36
  npmGlobalNodeModules,
@@ -45,7 +45,7 @@ import {
45
45
  loadAppSettings,
46
46
  resolveAgentExecutable,
47
47
  resolveClaudeExecutable
48
- } from "./chunk-PHMFAU35.js";
48
+ } from "./chunk-GCHSJCCX.js";
49
49
  import {
50
50
  isElectronLikeCommand,
51
51
  unwrapStrippedElectronLaunch,
@@ -57,7 +57,7 @@ import {
57
57
  CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS,
58
58
  CLAUDE_PRINT_BG_WAIT_CEILING_MS,
59
59
  mcpAllowToolsFromNames
60
- } from "./chunk-3UDRWMIM.js";
60
+ } from "./chunk-U35AHE2P.js";
61
61
  import {
62
62
  appDataDir
63
63
  } from "./chunk-WOU343SI.js";
@@ -2916,7 +2916,7 @@ var claudeAdapter = {
2916
2916
  );
2917
2917
  }
2918
2918
  const mode = permissionMode(thread);
2919
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-UDRTONQE.js");
2919
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-SK4JQBPN.js");
2920
2920
  const isOrchestrator = isOrchestratorThread2(thread);
2921
2921
  const rpc = worktreeAgentRpc(isOrchestrator);
2922
2922
  const injectedServers = await buildInjectedMcpServers({