@sideboard-ai/core 0.1.273 → 0.1.275

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 (48) hide show
  1. package/dist/{abletime-4ZSDI4YP.js → abletime-VCVPSLSU.js} +4 -4
  2. package/dist/{abletime-JNQAHLHH.js → abletime-VRATUMDO.js} +4 -4
  3. package/dist/{abletime-oauth-4RXZH2KU.js → abletime-oauth-4C4G2J3R.js} +3 -3
  4. package/dist/{abletime-oauth-DCEIINYT.js → abletime-oauth-4K7MICAD.js} +3 -3
  5. package/dist/{abletime-rest-KVBJFVFD.js → abletime-rest-6N63ZVQ3.js} +3 -3
  6. package/dist/{abletime-rest-VN6PZ6P2.js → abletime-rest-PIBCNHF3.js} +3 -3
  7. package/dist/{agents-LAFFXBBZ.js → agents-2FOWVJCN.js} +4 -4
  8. package/dist/{agents-ZCO37SKG.js → agents-JBVJRDH3.js} +4 -4
  9. package/dist/{app-settings-RAC4PSSP.js → app-settings-EQQZQNYD.js} +1 -1
  10. package/dist/{app-settings-L5HGYXWJ.js → app-settings-NI4X5HW3.js} +1 -1
  11. package/dist/{chunk-UXI52MLJ.js → chunk-2J34G3WJ.js} +3 -3
  12. package/dist/{chunk-PTNGMA5C.js → chunk-A2G3ZBJS.js} +2 -2
  13. package/dist/{chunk-T47ARZ5Q.js → chunk-FELFTNH2.js} +25 -24
  14. package/dist/{chunk-OUBQH5GR.js → chunk-HOMZKYHF.js} +31 -29
  15. package/dist/{chunk-GONPMH36.js → chunk-IJDQKC5A.js} +5 -5
  16. package/dist/{chunk-USBZ7PH4.js → chunk-IPPY3FG5.js} +1 -1
  17. package/dist/{chunk-NWE3NOWQ.js → chunk-K7MWJLR7.js} +1 -1
  18. package/dist/{chunk-HO2T6BC3.js → chunk-MGS5T2A3.js} +31 -29
  19. package/dist/{chunk-ADWNK2JH.js → chunk-NIB2IZ6J.js} +5 -5
  20. package/dist/{chunk-AGXZAMOF.js → chunk-NQ7JMVSU.js} +2 -2
  21. package/dist/{chunk-JLDJGGCL.js → chunk-NT7RIWRR.js} +5 -5
  22. package/dist/{chunk-L6CYOON4.js → chunk-PZURG3XN.js} +5 -5
  23. package/dist/{chunk-LAIBYKZS.js → chunk-QINJKNLR.js} +3 -3
  24. package/dist/{chunk-2QUILREI.js → chunk-QTZO4LPU.js} +2 -2
  25. package/dist/{chunk-KZ2CDZBZ.js → chunk-R7HLXD4I.js} +3 -3
  26. package/dist/{chunk-N3LASDJM.js → chunk-SQOAFR2U.js} +26 -25
  27. package/dist/{chunk-OIENQEGG.js → chunk-WRIMAEF2.js} +67 -122
  28. package/dist/{chunk-DBFAFI5A.js → chunk-XKZAVGTT.js} +2 -2
  29. package/dist/{chunk-PAH7KDL2.js → chunk-YNTXWFXT.js} +67 -122
  30. package/dist/{conductor-3AQM67VK.js → conductor-GBCE37K4.js} +4 -4
  31. package/dist/{conductor-FLWACOVC.js → conductor-YYQKZAND.js} +4 -4
  32. package/dist/{coordinator-prompt-4KVA6XUX.js → coordinator-prompt-B3GLVXPP.js} +3 -3
  33. package/dist/{coordinator-prompt-MVUHFNSC.js → coordinator-prompt-SFZCZ3HR.js} +3 -3
  34. package/dist/{global-workspace-FR7QTLPK.js → global-workspace-7XEXTIHL.js} +3 -3
  35. package/dist/{global-workspace-34Z2IWYQ.js → global-workspace-N2YYJKA5.js} +3 -3
  36. package/dist/index.cjs +1700 -186
  37. package/dist/index.d.cts +99 -20
  38. package/dist/index.d.ts +99 -20
  39. package/dist/index.js +1583 -43
  40. package/dist/mcp/run-stdio.cjs +95 -141
  41. package/dist/mcp/run-stdio.js +11 -11
  42. package/dist/{orchestrator-YKSDWR6C.js → orchestrator-6QJLM6Y4.js} +6 -6
  43. package/dist/{orchestrator-K42IBMBE.js → orchestrator-QMKVXVUR.js} +6 -6
  44. package/dist/{workspaces-5GERYHDJ.js → workspaces-BJCHMGVG.js} +3 -3
  45. package/dist/{workspaces-2JBDUMM6.js → workspaces-PBB6HY2D.js} +3 -3
  46. package/dist/{worktree-ACW23KJ5.js → worktree-L57T3KH7.js} +2 -2
  47. package/dist/{worktree-C7RPVHZ7.js → worktree-Q6UJHG25.js} +2 -2
  48. package/package.json +1 -1
@@ -8,7 +8,7 @@ import {
8
8
  isGlobalThread,
9
9
  isOrchestratorThread,
10
10
  isSlackCoordinatorThread
11
- } from "./chunk-PTNGMA5C.js";
11
+ } from "./chunk-A2G3ZBJS.js";
12
12
  import {
13
13
  allocateTeamName,
14
14
  mergeAgentGitAuthEnv,
@@ -16,7 +16,7 @@ import {
16
16
  resolveAgentGitAuthEnv,
17
17
  takenSlugsFromThread,
18
18
  worktreeNameFromPath
19
- } from "./chunk-USBZ7PH4.js";
19
+ } from "./chunk-IPPY3FG5.js";
20
20
  import {
21
21
  createEmptyThread,
22
22
  findThreadByRef,
@@ -43,7 +43,7 @@ import {
43
43
  import {
44
44
  assertOrchestratorCapableAgent,
45
45
  contextTokens
46
- } from "./chunk-PAH7KDL2.js";
46
+ } from "./chunk-YNTXWFXT.js";
47
47
  import {
48
48
  stripNestedElectronEnv
49
49
  } from "./chunk-4TR3HZFT.js";
@@ -1194,6 +1194,31 @@ import {
1194
1194
  } from "fs";
1195
1195
  import { dirname as dirname3, join as join4 } from "path";
1196
1196
 
1197
+ // src/mcp/job-process.ts
1198
+ function jobAlive(pid) {
1199
+ if (!Number.isInteger(pid) || pid <= 0) return false;
1200
+ try {
1201
+ process.kill(pid, 0);
1202
+ return true;
1203
+ } catch {
1204
+ return false;
1205
+ }
1206
+ }
1207
+ function processGroupAlive(pgid) {
1208
+ if (process.platform === "win32") return false;
1209
+ if (!Number.isInteger(pgid) || pgid <= 1) return false;
1210
+ try {
1211
+ process.kill(-pgid, 0);
1212
+ return true;
1213
+ } catch (err) {
1214
+ return Boolean(err && typeof err === "object" && "code" in err && err.code === "EPERM");
1215
+ }
1216
+ }
1217
+ function jobTreeAlive(pid) {
1218
+ if (pid == null) return false;
1219
+ return jobAlive(pid) || processGroupAlive(pid);
1220
+ }
1221
+
1197
1222
  // src/orchestrator/task-state.ts
1198
1223
  function isTerminalTaskState(state) {
1199
1224
  return state !== "submitted" && state !== "working";
@@ -1299,29 +1324,6 @@ function sanitizeDetachedJobId(id) {
1299
1324
  }
1300
1325
  return s;
1301
1326
  }
1302
- function jobAlive(pid) {
1303
- if (!Number.isInteger(pid) || pid <= 0) return false;
1304
- try {
1305
- process.kill(pid, 0);
1306
- return true;
1307
- } catch {
1308
- return false;
1309
- }
1310
- }
1311
- function processGroupAlive(pgid) {
1312
- if (process.platform === "win32") return false;
1313
- if (!Number.isInteger(pgid) || pgid <= 1) return false;
1314
- try {
1315
- process.kill(-pgid, 0);
1316
- return true;
1317
- } catch (err) {
1318
- return Boolean(err && typeof err === "object" && "code" in err && err.code === "EPERM");
1319
- }
1320
- }
1321
- function jobTreeAlive(pid) {
1322
- if (pid == null) return false;
1323
- return jobAlive(pid) || processGroupAlive(pid);
1324
- }
1325
1327
  function readIntFile(file) {
1326
1328
  if (!existsSync3(file)) return null;
1327
1329
  const n = Number.parseInt(readFileSync3(file, "utf8").trim(), 10);
@@ -1362,7 +1364,7 @@ function looksLikeDeferredDonePromise(text) {
1362
1364
  if (!t || t.length > DEFERRED_DONE_MAX_CHARS) return false;
1363
1365
  const unquoted = t.replace(/`[^`]*`/g, " ").replace(/["“”][^"“”]*["“”]/g, " ").replace(/\s+/g, " ").trim();
1364
1366
  if (!unquoted) return false;
1365
- return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted) || /\bbackground poll\b/i.test(unquoted) || /\bwill notify (?:me|you) when\b/i.test(unquoted) || /\bi(?:['’]ll| will) be notified when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(?:keep|continue)\s+(?:watching|waiting|polling|checking)\b/i.test(
1367
+ return /\b(i['’]?ll|i will)\s+let you know\b/i.test(unquoted) || /\blet you know when\b/i.test(unquoted) || /\b(check back|ping me)\s+when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(report|update you)\s+when\b/i.test(unquoted) || /\bwill notify (?:me|you) when\b/i.test(unquoted) || /\bi(?:['’]ll| will) be notified when\b/i.test(unquoted) || /\bi(?:['’]ll| will)\s+(?:keep|continue)\s+(?:watching|waiting|polling|checking)\b/i.test(
1366
1368
  unquoted
1367
1369
  ) || /\bi(?:['’]ll| will)\s+come back when\b/i.test(unquoted);
1368
1370
  }
@@ -1406,7 +1408,7 @@ function formatJobStillRunningContinuePrompt(jobIds) {
1406
1408
  function formatDeferredDoneContinuePrompt() {
1407
1409
  return [
1408
1410
  "You ended the turn after promising to report later, but no detached job is running.",
1409
- "A native background poll / Task / bash notify does not resume this chat (Claude, Cursor, Codex, OpenCode).",
1411
+ "A native CLI Task or bash notify does not resume this chat (Claude, Cursor, Codex, OpenCode).",
1410
1412
  "If tests/pack/deploy still need to run: start once with detached-job.cjs, then loop wait_for_job until stillRunning is false (the log pane updates from wait JSON).",
1411
1413
  "Do not say you will let the user know later."
1412
1414
  ].join(" ");
@@ -1631,7 +1633,7 @@ var PORT_RANGE_SIZE = 10;
1631
1633
  var RECLAIM_RETRY_DELAY_MS = 40;
1632
1634
  var RECLAIM_TRIES = 8;
1633
1635
  async function killReclaimable(ports, worktreePath, signal) {
1634
- const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-3AQM67VK.js");
1636
+ const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-GBCE37K4.js");
1635
1637
  if (worktreePath) killStaleWorktreeListeners2(ports, worktreePath, signal);
1636
1638
  else killListenersOnPorts2(ports);
1637
1639
  }
@@ -12,13 +12,13 @@ import {
12
12
  } from "./chunk-FAGK33E2.js";
13
13
  import {
14
14
  isOrchestratorThread
15
- } from "./chunk-PTNGMA5C.js";
15
+ } from "./chunk-A2G3ZBJS.js";
16
16
  import {
17
17
  codexUnattendedGitConfigArgs,
18
18
  mergeAgentGitAuthEnv,
19
19
  resolveAgentGitAuthEnv,
20
20
  resolveCodexGitWritableRoots
21
- } from "./chunk-USBZ7PH4.js";
21
+ } from "./chunk-IPPY3FG5.js";
22
22
  import {
23
23
  loadBrightsyConfig
24
24
  } from "./chunk-ROPGQRPU.js";
@@ -71,7 +71,7 @@ import {
71
71
  loadAppSettings,
72
72
  resolveAgentExecutable,
73
73
  resolveClaudeExecutable
74
- } from "./chunk-PAH7KDL2.js";
74
+ } from "./chunk-YNTXWFXT.js";
75
75
  import {
76
76
  isElectronLikeCommand,
77
77
  unwrapStrippedElectronLaunch
@@ -1745,7 +1745,7 @@ var claudeAdapter = {
1745
1745
  );
1746
1746
  }
1747
1747
  const mode = permissionMode(thread);
1748
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-34Z2IWYQ.js");
1748
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-N2YYJKA5.js");
1749
1749
  const isOrchestrator = isOrchestratorThread2(thread);
1750
1750
  const rpc = worktreeAgentRpc(isOrchestrator);
1751
1751
  const injectedServers = await buildInjectedMcpServers({
@@ -3893,7 +3893,7 @@ async function loginAgent(agent) {
3893
3893
  };
3894
3894
  }
3895
3895
  async function loginManagedAccount(accountId) {
3896
- const { loadAppSettings: loadAppSettings2 } = await import("./app-settings-L5HGYXWJ.js");
3896
+ const { loadAppSettings: loadAppSettings2 } = await import("./app-settings-NI4X5HW3.js");
3897
3897
  const { loginEnvPrefix } = await import("./managed-accounts-2AK5RIAF.js");
3898
3898
  const account = loadAppSettings2().accounts.accounts.find((a) => a.id === accountId);
3899
3899
  if (!account) {
@@ -4,14 +4,14 @@ import {
4
4
  normalizeAbleTimeCredential,
5
5
  normalizeAbleTimeHost,
6
6
  rewriteAbleTimeError
7
- } from "./chunk-L6CYOON4.js";
7
+ } from "./chunk-PZURG3XN.js";
8
8
  import {
9
9
  httpFetch
10
10
  } from "./chunk-N7WZ6NIN.js";
11
11
  import {
12
12
  getAbleTimeAccessToken,
13
13
  getAbleTimeHost
14
- } from "./chunk-PAH7KDL2.js";
14
+ } from "./chunk-YNTXWFXT.js";
15
15
 
16
16
  // src/integrations/abletime-rest.ts
17
17
  var ABLETIME_REST_PREFIX = "/api/public/v2";
@@ -24,13 +24,13 @@ import {
24
24
  } from "./chunk-UKSJO36E.js";
25
25
  import {
26
26
  isOrchestratorThread
27
- } from "./chunk-2QUILREI.js";
27
+ } from "./chunk-QTZO4LPU.js";
28
28
  import {
29
29
  codexUnattendedGitConfigArgs,
30
30
  mergeAgentGitAuthEnv,
31
31
  resolveAgentGitAuthEnv,
32
32
  resolveCodexGitWritableRoots
33
- } from "./chunk-NWE3NOWQ.js";
33
+ } from "./chunk-K7MWJLR7.js";
34
34
  import {
35
35
  enrichPathWithNpmGlobalBin,
36
36
  isConductorBundledCli,
@@ -47,7 +47,7 @@ import {
47
47
  loadAppSettings,
48
48
  resolveAgentExecutable,
49
49
  resolveClaudeExecutable
50
- } from "./chunk-OIENQEGG.js";
50
+ } from "./chunk-WRIMAEF2.js";
51
51
  import {
52
52
  isElectronLikeCommand,
53
53
  unwrapStrippedElectronLaunch,
@@ -2010,7 +2010,7 @@ var claudeAdapter = {
2010
2010
  );
2011
2011
  }
2012
2012
  const mode = permissionMode(thread);
2013
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-FR7QTLPK.js");
2013
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-7XEXTIHL.js");
2014
2014
  const isOrchestrator = isOrchestratorThread2(thread);
2015
2015
  const rpc = worktreeAgentRpc(isOrchestrator);
2016
2016
  const injectedServers = await buildInjectedMcpServers({
@@ -4541,7 +4541,7 @@ async function loginAgent(agent) {
4541
4541
  };
4542
4542
  }
4543
4543
  async function loginManagedAccount(accountId) {
4544
- const { loadAppSettings: loadAppSettings2 } = await import("./app-settings-RAC4PSSP.js");
4544
+ const { loadAppSettings: loadAppSettings2 } = await import("./app-settings-EQQZQNYD.js");
4545
4545
  const { loginEnvPrefix } = await import("./managed-accounts-46A4KRUE.js");
4546
4546
  const account = loadAppSettings2().accounts.accounts.find((a) => a.id === accountId);
4547
4547
  if (!account) {
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getAbleTimeHost,
6
6
  isAbleTimeConnected
7
- } from "./chunk-PAH7KDL2.js";
7
+ } from "./chunk-YNTXWFXT.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-4RXZH2KU.js").then((m) => m.ensureAbleTimeAccessToken());
156
+ const rawToken = opts?.token ?? await import("./abletime-oauth-4C4G2J3R.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-4RXZH2KU.js").then((m) => m.ensureAbleTimeAccessToken());
227
+ const rawToken = opts?.token ?? await import("./abletime-oauth-4C4G2J3R.js").then((m) => m.ensureAbleTimeAccessToken());
228
228
  if (rawToken && ableTimeUsesRest(rawToken)) {
229
- const { callAbleTimeRestTool } = await import("./abletime-rest-KVBJFVFD.js");
229
+ const { callAbleTimeRestTool } = await import("./abletime-rest-6N63ZVQ3.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-KVBJFVFD.js");
245
+ const { callAbleTimeRestTool } = await import("./abletime-rest-6N63ZVQ3.js");
246
246
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
247
247
  }
248
248
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DEFAULT_ABLETIME_HOST,
3
3
  normalizeAbleTimeHost
4
- } from "./chunk-L6CYOON4.js";
4
+ } from "./chunk-PZURG3XN.js";
5
5
  import {
6
6
  httpFetch
7
7
  } from "./chunk-N7WZ6NIN.js";
@@ -10,7 +10,7 @@ import {
10
10
  getAbleTimeHost,
11
11
  loadAppSettings,
12
12
  saveAbleTimeConnection
13
- } from "./chunk-PAH7KDL2.js";
13
+ } from "./chunk-YNTXWFXT.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-JNQAHLHH.js");
283
+ const { getAbleTimeOrientation } = await import("./abletime-VRATUMDO.js");
284
284
  const orientation = await getAbleTimeOrientation({ token, host });
285
285
  return saveAbleTimeConnection({
286
286
  accessToken: token,
@@ -8,7 +8,7 @@ import {
8
8
  resolveRepoRoot,
9
9
  takenSlugsFromThread,
10
10
  teamSlugFromName
11
- } from "./chunk-NWE3NOWQ.js";
11
+ } from "./chunk-K7MWJLR7.js";
12
12
  import {
13
13
  ATTACHMENTS_DIR,
14
14
  attachmentsGitignoreBody
@@ -25,7 +25,7 @@ import {
25
25
  resolveThreadDefaults,
26
26
  resolveViewerProfile,
27
27
  resolveViewerProfileForRepo
28
- } from "./chunk-OIENQEGG.js";
28
+ } from "./chunk-WRIMAEF2.js";
29
29
  import {
30
30
  createEmptyThread,
31
31
  listThreads,
@@ -3,13 +3,13 @@
3
3
  import {
4
4
  abletimeRestUrl,
5
5
  textFromAbleTimeDoc
6
- } from "./chunk-DBFAFI5A.js";
6
+ } from "./chunk-XKZAVGTT.js";
7
7
  import {
8
8
  assertAbleTimeCredential,
9
9
  callAbleTimeTool,
10
10
  normalizeAbleTimeHost,
11
11
  rewriteAbleTimeError
12
- } from "./chunk-GONPMH36.js";
12
+ } from "./chunk-IJDQKC5A.js";
13
13
  import {
14
14
  httpFetch
15
15
  } from "./chunk-VKQGAWHY.js";
@@ -22,7 +22,7 @@ import {
22
22
  getAbleTimeHost,
23
23
  isAbleTimeConnected,
24
24
  saveAbleTimeConnection
25
- } from "./chunk-OIENQEGG.js";
25
+ } from "./chunk-WRIMAEF2.js";
26
26
 
27
27
  // src/integrations/issue-attachments.ts
28
28
  import { existsSync, mkdirSync, writeFileSync } from "fs";
@@ -7,7 +7,7 @@ import {
7
7
  parseSessionQuotaResetAt,
8
8
  planModeTurnInstruction,
9
9
  resolveQuotaFallbackAgent
10
- } from "./chunk-ADWNK2JH.js";
10
+ } from "./chunk-NIB2IZ6J.js";
11
11
  import {
12
12
  REVIEW_TAB_TITLE,
13
13
  applyWorktreePkgCacheEnv,
@@ -44,7 +44,7 @@ import {
44
44
  worktreeDevProcessKey,
45
45
  worktreeRunProcessKey,
46
46
  worktreeSetupProcessKey
47
- } from "./chunk-HO2T6BC3.js";
47
+ } from "./chunk-MGS5T2A3.js";
48
48
  import {
49
49
  applyAgentEvent,
50
50
  clipAgentEventForPaint,
@@ -88,7 +88,7 @@ import {
88
88
  stageAbsolutePathsAsAttachments,
89
89
  stageBuffersAsAttachments,
90
90
  syncWorkspacesFromThreads
91
- } from "./chunk-PTNGMA5C.js";
91
+ } from "./chunk-A2G3ZBJS.js";
92
92
  import {
93
93
  addPrStackLayer,
94
94
  agentNicknameFromWorktreePath,
@@ -140,7 +140,7 @@ import {
140
140
  worktreeIdentityTitles,
141
141
  worktreeNameFromPath,
142
142
  worktreeSlugForTicket
143
- } from "./chunk-USBZ7PH4.js";
143
+ } from "./chunk-IPPY3FG5.js";
144
144
  import {
145
145
  appendMessage,
146
146
  createEmptyThread,
@@ -215,7 +215,7 @@ import {
215
215
  updateAdvancedSettings,
216
216
  usageOnLimit,
217
217
  withTurnScopedCost
218
- } from "./chunk-PAH7KDL2.js";
218
+ } from "./chunk-YNTXWFXT.js";
219
219
  import {
220
220
  examplePrefixedBranch,
221
221
  sanitizeGitBranchPrefix
@@ -437,9 +437,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
437
437
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
438
438
  );
439
439
  }
440
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-34Z2IWYQ.js");
440
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-N2YYJKA5.js");
441
441
  if (isGlobalThread2(thread)) {
442
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-4KVA6XUX.js");
442
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-B3GLVXPP.js");
443
443
  ensureGlobalCoordinatorCwd2(
444
444
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
445
445
  );
@@ -2238,7 +2238,7 @@ async function createThread(input, _onSetupLine) {
2238
2238
  });
2239
2239
  await requireAgent(resolved.agent);
2240
2240
  if (input.cowboy) {
2241
- const { cowboyModeEnabled } = await import("./app-settings-L5HGYXWJ.js");
2241
+ const { cowboyModeEnabled } = await import("./app-settings-NI4X5HW3.js");
2242
2242
  if (!cowboyModeEnabled()) {
2243
2243
  throw new Error(
2244
2244
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -2296,7 +2296,7 @@ async function createThread(input, _onSetupLine) {
2296
2296
  let sourceIsFork = false;
2297
2297
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
2298
2298
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
2299
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-JNQAHLHH.js");
2299
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-VRATUMDO.js");
2300
2300
  const task = await ensureAbleTimeTask({
2301
2301
  title: title?.trim() || "Untitled work",
2302
2302
  description: input.prompt?.trim() || void 0
@@ -2406,7 +2406,7 @@ async function createThread(input, _onSetupLine) {
2406
2406
  return readThread(thread.id) ?? thread;
2407
2407
  }
2408
2408
  async function listLinearIssues(agent, repoPath) {
2409
- const { getAdapter: getAdapter2 } = await import("./agents-LAFFXBBZ.js");
2409
+ const { getAdapter: getAdapter2 } = await import("./agents-2FOWVJCN.js");
2410
2410
  await requireAgent(agent, { requireLinear: true });
2411
2411
  const adapter = getAdapter2(agent);
2412
2412
  if (!adapter.listLinearIssues) {
@@ -2913,7 +2913,7 @@ async function adoptThread(input) {
2913
2913
  messages: input.messages ?? []
2914
2914
  });
2915
2915
  writeThread(thread);
2916
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-2JBDUMM6.js");
2916
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-PBB6HY2D.js");
2917
2917
  await ensureWorkspace2(repoPath);
2918
2918
  const { ensureWorktreeSideboardIgnored } = await import("./worktree-exclude-RXZPTCNH.js");
2919
2919
  await ensureWorktreeSideboardIgnored(input.worktreePath);
@@ -4374,7 +4374,7 @@ var LONG_RUNNING_SKILL_BODY = `# Long-running jobs
4374
4374
 
4375
4375
  A Sideboard or Cursor **worktree turn** SIGTERMs the agent shell (and its process group) when the user sends another message or the turn is interrupted. \`block_until_ms: 0\` is not enough \u2014 the child stays in that group.
4376
4376
 
4377
- Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn with \u201CI\u2019ll let you know\u201D or \u201Ca background poll will notify me.\u201D Native background bash/Task notify (Claude, Cursor, Codex, OpenCode) does **not** resume a Sideboard chat.
4377
+ Do **not** ask the human to check back. Detach, then **wait** in 45s slices (MCP \`wait_for_job\`, same idea as \`wait_for_turn\`) until \`stillRunning\` is false. Do not end the turn after starting a job \u2014 a native CLI Task or bash notify does **not** resume a Sideboard chat (Claude, Cursor, Codex, OpenCode).
4378
4378
 
4379
4379
  ## Tool
4380
4380
 
@@ -5017,7 +5017,7 @@ function formatPrGateDirective() {
5017
5017
  return [
5018
5018
  "If a goal is given (not after every push):",
5019
5019
  "- Enter a watch-fix-push loop and stay in it until that goal is met or you are blocked (examples: \u201CGreptile 5/5\u201D, \u201CCI green\u201D, \u201Cuntil checks pass\u201D). Do not stop after one red run or one review cycle.",
5020
- "- Wait with `/long-running`: detach `gh pr checks --watch` (add `-R <origin>` when needed), then loop `wait_for_job` until stillRunning is false. Do not end the turn \u2014 a background poll / Task notify does not resume this chat. Do not ask the human to poll.",
5020
+ "- Wait with `/long-running`: detach `gh pr checks --watch` (add `-R <origin>` when needed), then loop `wait_for_job` until stillRunning is false. Do not end the turn \u2014 a native CLI Task or bash notify does not resume this chat. Do not ask the human to poll.",
5021
5021
  "- Greptile 5/5: wait for the greptile check; read the latest `N/5` from the PR body or Greptile\u2019s most recently *updated* issue comment; also fetch unresolved review comments / the \u201CPrompt to fix all with AI\u201D block. Done = **5/5 and zero unresolved Greptile comments**. If Greptile is idle, comment `@greptile review`. Cap about 5 iterations, then report leftovers. Do not merge unless asked."
5022
5022
  ].join("\n");
5023
5023
  }
@@ -5050,7 +5050,7 @@ function formatLongRunningDirective(opts) {
5050
5050
  }
5051
5051
  function formatLongRunningReminder(opts) {
5052
5052
  const invoke = formatDetachedJobInvoke(opts?.scriptPath);
5053
- return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. A background poll / Task notify does not resume this chat. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
5053
+ return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. A native CLI Task or bash notify does not resume this chat. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script / get_run_log (UI-connected \u2014 not detached-job). ${formatDevAccessHint(opts?.activeRuns)}`;
5054
5054
  }
5055
5055
  function formatArtifactDirective() {
5056
5056
  return [
@@ -5610,7 +5610,7 @@ function formatScheduledPrompt(name, prompt) {
5610
5610
  ${prompt}`;
5611
5611
  }
5612
5612
  async function defaultDeps() {
5613
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-K42IBMBE.js");
5613
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-QMKVXVUR.js");
5614
5614
  const orch = getOrchestrator2();
5615
5615
  return {
5616
5616
  findThread: (id) => findThreadByRef(id),
@@ -5928,7 +5928,7 @@ var Orchestrator = class {
5928
5928
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
5929
5929
  });
5930
5930
  }
5931
- const { autoCleanupOrphansEnabled } = await import("./app-settings-L5HGYXWJ.js");
5931
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-NI4X5HW3.js");
5932
5932
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
5933
5933
  await cleanupOrphanWorktrees({ repoPaths });
5934
5934
  }
@@ -6317,7 +6317,7 @@ var Orchestrator = class {
6317
6317
  }
6318
6318
  await setup;
6319
6319
  if (skipSetup) return;
6320
- const { autoRunAfterSetupEnabled } = await import("./app-settings-L5HGYXWJ.js");
6320
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-NI4X5HW3.js");
6321
6321
  if (autoRunAfterSetupEnabled()) {
6322
6322
  try {
6323
6323
  await this.startDev(threadId);
@@ -6370,7 +6370,8 @@ var Orchestrator = class {
6370
6370
  throw new Error(`Thread is archived: ${thread.id}`);
6371
6371
  }
6372
6372
  const followUp = resolveSendFollowUp(current, opts?.followUp);
6373
- const consumed = consumeComposerAttachments(current);
6373
+ const explicit = opts?.attachments;
6374
+ const consumed = explicit !== void 0 ? { attachments: current.attachments, consumed: explicit } : consumeComposerAttachments(current);
6374
6375
  const queued = appendQueuedItem(
6375
6376
  current.queue,
6376
6377
  current.queueAttachments,
@@ -6384,7 +6385,7 @@ var Orchestrator = class {
6384
6385
  const inFlight = this.activeTurns.has(thread.id) || this.startingTurns.has(thread.id) || current.status === "running";
6385
6386
  shouldSteer = followUp === "steer" && (inFlight || current.queue.length > 0);
6386
6387
  const patch = queued;
6387
- if (consumed.consumed.length > 0) {
6388
+ if (explicit === void 0 && consumed.consumed.length > 0) {
6388
6389
  patch.attachments = consumed.attachments;
6389
6390
  }
6390
6391
  if (!inFlight) patch.status = "queued";
@@ -6696,7 +6697,7 @@ var Orchestrator = class {
6696
6697
  }
6697
6698
  const isBrightsy = fresh.agent === "brightsy";
6698
6699
  const isOrchestration = isOrchestratorThread(fresh);
6699
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-L5HGYXWJ.js");
6700
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-NI4X5HW3.js");
6700
6701
  const gitAuthMode = getGithubGitAuthMode();
6701
6702
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
6702
6703
  githubSlug: await withTimeout(
@@ -8006,7 +8007,7 @@ var Orchestrator = class {
8006
8007
  if (Object.keys(patch).length === 0) continue;
8007
8008
  updateThread(t.id, patch);
8008
8009
  }
8009
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-L5HGYXWJ.js");
8010
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-NI4X5HW3.js");
8010
8011
  const latest = this.requireThread(thread.id);
8011
8012
  if (!shouldAutoArchiveOnPrMerge({
8012
8013
  previousPrState: prevState || null,
@@ -8297,7 +8298,7 @@ var Orchestrator = class {
8297
8298
  this.enforceHistoryRetention();
8298
8299
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
8299
8300
  try {
8300
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-2JBDUMM6.js");
8301
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-PBB6HY2D.js");
8301
8302
  await ensureWorkspace2(thread.repoPath);
8302
8303
  } catch {
8303
8304
  }
@@ -8324,7 +8325,7 @@ var Orchestrator = class {
8324
8325
  await runArchiveScript(thread.repoPath, thread.worktreePath);
8325
8326
  } catch {
8326
8327
  }
8327
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-L5HGYXWJ.js");
8328
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-NI4X5HW3.js");
8328
8329
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
8329
8330
  await removeWorktree(thread.repoPath, thread.worktreePath, {
8330
8331
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -8351,7 +8352,7 @@ var Orchestrator = class {
8351
8352
  `Cowboy checkout missing: ${thread.worktreePath}. Re-add the project folder, then restore.`
8352
8353
  );
8353
8354
  }
8354
- const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-C7RPVHZ7.js");
8355
+ const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-Q6UJHG25.js");
8355
8356
  const slug = thread.worktreePath.split("/").pop();
8356
8357
  const dest = thread.worktreePath;
8357
8358
  await withRepoGitLock(thread.repoPath, async () => {
@@ -8461,7 +8462,7 @@ async function startOrchestration(opts) {
8461
8462
  sourceRef: "default",
8462
8463
  ...createOpts
8463
8464
  }).catch(async () => {
8464
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-C7RPVHZ7.js");
8465
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-Q6UJHG25.js");
8465
8466
  const repo = await resolveRepoRoot2(repoPath);
8466
8467
  const def = await resolveDefaultBranch2(repo);
8467
8468
  return orch.createThread({