@sideboard-ai/core 0.1.326 → 0.1.327

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 (73) hide show
  1. package/dist/{abletime-RYYFGKMU.js → abletime-NW4PJGHN.js} +4 -5
  2. package/dist/{abletime-RDHYSZL2.js → abletime-OW7LTFQD.js} +4 -5
  3. package/dist/{abletime-oauth-OYGS2DAU.js → abletime-oauth-KWQQRHOQ.js} +3 -4
  4. package/dist/{abletime-oauth-QR2QDVMK.js → abletime-oauth-TPR2QDRI.js} +3 -4
  5. package/dist/{abletime-rest-QDPTWNS4.js → abletime-rest-5DCWN3P4.js} +3 -4
  6. package/dist/{abletime-rest-BKYKNPTC.js → abletime-rest-UJ6SXDBN.js} +3 -4
  7. package/dist/agents/claude-runner.cjs +11 -0
  8. package/dist/agents/claude-runner.js +7 -1
  9. package/dist/{agents-QO7GKBYT.js → agents-IYBY3JT5.js} +8 -9
  10. package/dist/{agents-HANWZNI6.js → agents-XWIPONJR.js} +8 -9
  11. package/dist/{app-settings-RXBH7KY4.js → app-settings-A5D364JD.js} +1 -2
  12. package/dist/{app-settings-TUVLZNDE.js → app-settings-SA4HX3ZQ.js} +1 -2
  13. package/dist/{chunk-3Q4XNYHY.js → chunk-2GEUFPQQ.js} +1 -1
  14. package/dist/{chunk-MAW7DIG7.js → chunk-4F7THWIO.js} +2 -2
  15. package/dist/{chunk-K7M7MIWL.js → chunk-4G3W23X3.js} +3 -3
  16. package/dist/{chunk-Q3FHTGIW.js → chunk-5Y2C7Q55.js} +441 -20
  17. package/dist/{chunk-TMCK5TLA.js → chunk-ATQLP22S.js} +1 -1
  18. package/dist/{chunk-PB6HW7SA.js → chunk-CHYUUETG.js} +3 -3
  19. package/dist/{chunk-QPSKQP6E.js → chunk-D446IWPP.js} +48 -3
  20. package/dist/{chunk-C7HUCBX7.js → chunk-DACWFN4O.js} +5 -5
  21. package/dist/{chunk-GP3RLZ6A.js → chunk-DEB47BII.js} +51 -487
  22. package/dist/{chunk-B244TJWC.js → chunk-ECY7WL6T.js} +2 -2
  23. package/dist/{chunk-D744HOI5.js → chunk-EJRCHCXM.js} +18 -3
  24. package/dist/{chunk-KXRF6RNL.js → chunk-EUIVQAPK.js} +2 -2
  25. package/dist/{chunk-46FECFZU.js → chunk-IXWPCOLQ.js} +8 -195
  26. package/dist/{chunk-75RPUXJS.js → chunk-JKHCADKB.js} +5 -5
  27. package/dist/{chunk-4H5MWZ6J.js → chunk-KLVW3J2B.js} +2 -2
  28. package/dist/{chunk-QG4CYRA3.js → chunk-MO46K6WK.js} +14 -14
  29. package/dist/{chunk-F2PVRF3B.js → chunk-N6ZF3XRP.js} +2 -1
  30. package/dist/{chunk-BBNWKL4I.js → chunk-NQGLDQYB.js} +8 -8
  31. package/dist/{chunk-YGVGXQA7.js → chunk-Q4UPRQOS.js} +12 -12
  32. package/dist/{chunk-ZUAYA57W.js → chunk-QMLDR63X.js} +2 -2
  33. package/dist/{chunk-KECHK3ZT.js → chunk-R2C45NHT.js} +2 -2
  34. package/dist/{chunk-FWVUGLBG.js → chunk-RDXODLEN.js} +4 -4
  35. package/dist/{chunk-XLVLMQKN.js → chunk-RZJ3QJZT.js} +11 -11
  36. package/dist/{chunk-JM2TGOHP.js → chunk-SB5ADEZZ.js} +5 -5
  37. package/dist/{chunk-SO7G6O24.js → chunk-SFXGD5KJ.js} +1 -1
  38. package/dist/{chunk-LRHUBGEM.js → chunk-TUH4ICHQ.js} +1 -1
  39. package/dist/chunk-ULWPSBAB.js +192 -0
  40. package/dist/{chunk-WUCAVIIP.js → chunk-UMXBH344.js} +1 -1
  41. package/dist/{chunk-RZVOX2MT.js → chunk-XBBZZHJY.js} +3 -3
  42. package/dist/{chunk-ZSHS46V5.js → chunk-Y6OHM672.js} +476 -20
  43. package/dist/{chunk-2EOLWHXH.js → chunk-YUHZEIVG.js} +69 -473
  44. package/dist/{chunk-YWQF7WAG.js → chunk-ZPBOWO64.js} +2 -2
  45. package/dist/{conductor-4GVTHUUB.js → conductor-CP7TW6TN.js} +7 -7
  46. package/dist/{conductor-TGWI6ETZ.js → conductor-D62Q2XJC.js} +6 -7
  47. package/dist/{coordinator-prompt-3E6SIDTM.js → coordinator-prompt-3PJLU3UH.js} +5 -6
  48. package/dist/{coordinator-prompt-WEYJREV6.js → coordinator-prompt-J7O7JB26.js} +5 -6
  49. package/dist/{global-workspace-UIEXAG2B.js → global-workspace-4CTLU2BV.js} +5 -6
  50. package/dist/{global-workspace-FPDZKUPF.js → global-workspace-Y3UDZYJX.js} +5 -6
  51. package/dist/index.cjs +507 -492
  52. package/dist/index.d.cts +5 -2
  53. package/dist/index.d.ts +5 -2
  54. package/dist/index.js +67 -65
  55. package/dist/{linear-6S7MK5YK.js → linear-CXWGH2TW.js} +2 -3
  56. package/dist/{linear-Z2T4KUAQ.js → linear-WLDCJ3AF.js} +2 -3
  57. package/dist/{linear-list-Q4M7AZO2.js → linear-list-52LEDEWO.js} +1 -1
  58. package/dist/{linear-list-A37WLUBO.js → linear-list-FGVN65JU.js} +1 -1
  59. package/dist/mcp/run-stdio.cjs +19654 -19641
  60. package/dist/mcp/run-stdio.js +33 -34
  61. package/dist/{optional-cli-CA4LL322.js → optional-cli-FN4MGB6W.js} +4 -5
  62. package/dist/{optional-cli-AANBL4U5.js → optional-cli-INRVBBBG.js} +3 -4
  63. package/dist/{orchestrator-7FVDBE7Y.js → orchestrator-EN3ZKD73.js} +12 -12
  64. package/dist/{orchestrator-RQXRZW7Z.js → orchestrator-W4TZBBDO.js} +11 -12
  65. package/dist/{thread-store-4ZN3DS2W.js → thread-store-4WE24XA2.js} +6 -2
  66. package/dist/{thread-store-IC4BQXDW.js → thread-store-K2ZNGUSM.js} +7 -3
  67. package/dist/{workspaces-LEW4UP56.js → workspaces-MM7CQYR6.js} +5 -6
  68. package/dist/{workspaces-QONNLHNR.js → workspaces-WYCVZ6XH.js} +5 -6
  69. package/dist/{worktree-KFEJAQ2H.js → worktree-JBNEMJ5Z.js} +7 -8
  70. package/dist/{worktree-6GIONDQO.js → worktree-NNVRGPP4.js} +4 -5
  71. package/package.json +1 -1
  72. package/dist/chunk-77WWLBCI.js +0 -50
  73. package/dist/chunk-KGZBYWZ3.js +0 -23
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  loadAppSettings,
6
6
  saveAppSettings
7
- } from "./chunk-QPSKQP6E.js";
7
+ } from "./chunk-D446IWPP.js";
8
8
 
9
9
  // src/integrations/optional-services.ts
10
10
  var OPTIONAL_SERVICE_IDS = ["vercel", "supabase", "posthog", "sentry"];
@@ -273,7 +273,7 @@ async function connectedCliPresence(integrations) {
273
273
  const ids = connectedOptionalServices(integrations).filter((spec) => spec.cli).map((spec) => spec.id);
274
274
  if (ids.length === 0) return void 0;
275
275
  try {
276
- const { optionalCliPresence } = await import("./optional-cli-CA4LL322.js");
276
+ const { optionalCliPresence } = await import("./optional-cli-FN4MGB6W.js");
277
277
  return await optionalCliPresence(ids);
278
278
  } catch {
279
279
  return void 0;
@@ -18,9 +18,6 @@ import {
18
18
  withRemovedAccount,
19
19
  withSelectedAccount
20
20
  } from "./chunk-J2LNLI4S.js";
21
- import {
22
- normalizeThinkingEffort
23
- } from "./chunk-KGZBYWZ3.js";
24
21
  import {
25
22
  appDataDir
26
23
  } from "./chunk-WOU343SI.js";
@@ -55,6 +52,23 @@ function coerceOrchestratorAgent(agent, fallback = "claude") {
55
52
  return isOrchestratorCapableAgent(agent) ? agent : fallback;
56
53
  }
57
54
 
55
+ // src/types/thinking-effort.ts
56
+ var THINKING_EFFORTS = [
57
+ "low",
58
+ "medium",
59
+ "high",
60
+ "xhigh",
61
+ "max"
62
+ ];
63
+ var EFFORT_SET = new Set(THINKING_EFFORTS);
64
+ function normalizeThinkingEffort(value) {
65
+ if (typeof value !== "string") return null;
66
+ const v = value.trim().toLowerCase();
67
+ if (v === "normal") return "medium";
68
+ if (EFFORT_SET.has(v)) return v;
69
+ return null;
70
+ }
71
+
58
72
  // src/store/thread-option-defaults.ts
59
73
  function normalizeAutonomy(value) {
60
74
  return value === "default" || value === "full" ? value : void 0;
@@ -2372,6 +2386,7 @@ export {
2372
2386
  isOrchestratorCapableAgent,
2373
2387
  assertOrchestratorCapableAgent,
2374
2388
  coerceOrchestratorAgent,
2389
+ normalizeThinkingEffort,
2375
2390
  getDefaultAgent,
2376
2391
  getDefaultModel,
2377
2392
  getDefaultEffort,
@@ -4,14 +4,14 @@ import {
4
4
  normalizeAbleTimeCredential,
5
5
  normalizeAbleTimeHost,
6
6
  rewriteAbleTimeError
7
- } from "./chunk-C7HUCBX7.js";
7
+ } from "./chunk-DACWFN4O.js";
8
8
  import {
9
9
  httpFetch
10
10
  } from "./chunk-JAT3JFOS.js";
11
11
  import {
12
12
  getAbleTimeAccessToken,
13
13
  getAbleTimeHost
14
- } from "./chunk-QPSKQP6E.js";
14
+ } from "./chunk-D446IWPP.js";
15
15
 
16
16
  // src/integrations/abletime-rest.ts
17
17
  var ABLETIME_REST_PREFIX = "/api/public/v2";
@@ -8,11 +8,11 @@ import {
8
8
  isGlobalThread,
9
9
  isOrchestratorThread,
10
10
  isSlackCoordinatorThread
11
- } from "./chunk-FWVUGLBG.js";
11
+ } from "./chunk-RDXODLEN.js";
12
12
  import {
13
13
  mergeAgentGitAuthEnv,
14
14
  resolveAgentGitAuthEnv
15
- } from "./chunk-KECHK3ZT.js";
15
+ } from "./chunk-R2C45NHT.js";
16
16
  import {
17
17
  REVIEW_TAB_TITLE,
18
18
  allocateTeamName,
@@ -24,10 +24,13 @@ import {
24
24
  updateThread,
25
25
  worktreeNameFromPath,
26
26
  writeThread
27
- } from "./chunk-ZSHS46V5.js";
27
+ } from "./chunk-Y6OHM672.js";
28
28
  import {
29
29
  ensureWorktreeSideboardIgnored
30
30
  } from "./chunk-QKHEVSB5.js";
31
+ import {
32
+ lastTopLevelToolIsAskUser
33
+ } from "./chunk-ULWPSBAB.js";
31
34
  import {
32
35
  clipToolResultForStore
33
36
  } from "./chunk-OPXEJJBM.js";
@@ -44,7 +47,7 @@ import {
44
47
  import {
45
48
  assertOrchestratorCapableAgent,
46
49
  contextTokens
47
- } from "./chunk-QPSKQP6E.js";
50
+ } from "./chunk-D446IWPP.js";
48
51
  import {
49
52
  stripNestedElectronEnv
50
53
  } from "./chunk-4TR3HZFT.js";
@@ -1212,185 +1215,6 @@ function jobTreeAlive(pid) {
1212
1215
  return jobAlive(pid) || processGroupAlive(pid);
1213
1216
  }
1214
1217
 
1215
- // src/plan/ask-user.ts
1216
- function planQuestionsSignature(questions) {
1217
- return questions.map((q) => {
1218
- const opts = q.options.map((o) => o.label).join("");
1219
- return `${q.question}${opts}`;
1220
- }).join("");
1221
- }
1222
- function asRecord(v) {
1223
- return v != null && typeof v === "object" && !Array.isArray(v) ? v : null;
1224
- }
1225
- function parseOptions(raw) {
1226
- if (!Array.isArray(raw)) return [];
1227
- const out = [];
1228
- for (const item of raw) {
1229
- if (typeof item === "string" && item.trim()) {
1230
- out.push({ label: item.trim() });
1231
- continue;
1232
- }
1233
- const o = asRecord(item);
1234
- if (!o) continue;
1235
- const label = typeof o.label === "string" ? o.label.trim() : typeof o.text === "string" ? o.text.trim() : typeof o.title === "string" ? o.title.trim() : "";
1236
- if (!label) continue;
1237
- const description = typeof o.description === "string" && o.description.trim() ? o.description.trim() : void 0;
1238
- out.push({ label, description });
1239
- }
1240
- return out;
1241
- }
1242
- function parseOneQuestion(raw) {
1243
- const o = asRecord(raw);
1244
- if (!o) return null;
1245
- const question = typeof o.question === "string" ? o.question.trim() : typeof o.text === "string" ? o.text.trim() : typeof o.prompt === "string" ? o.prompt.trim() : "";
1246
- if (!question) return null;
1247
- const options = parseOptions(o.options);
1248
- if (options.length < 1) return null;
1249
- const header = typeof o.header === "string" && o.header.trim() ? o.header.trim() : void 0;
1250
- const multiSelect = Boolean(o.multiSelect ?? o.multi_select);
1251
- return { question, header, multiSelect, options };
1252
- }
1253
- function parsePlanQuestionsInput(input) {
1254
- const root = asRecord(input);
1255
- if (!root) return [];
1256
- const list = Array.isArray(root.questions) ? root.questions : Array.isArray(root.question) ? root.question : root.question || root.prompt ? [root] : [];
1257
- const out = [];
1258
- for (const item of list) {
1259
- const q = parseOneQuestion(item);
1260
- if (q) out.push(q);
1261
- }
1262
- return out;
1263
- }
1264
- var ASK_USER_TOOL_RE = /^(AskUserQuestion|ask_user|mcp__sideboard__ask_user)$/i;
1265
- function isAskUserToolName(name) {
1266
- if (!name) return false;
1267
- const base = name.replace(/^mcp__sideboard__/i, "");
1268
- return ASK_USER_TOOL_RE.test(name) || /^ask_user$/i.test(base);
1269
- }
1270
- function lastTopLevelToolIsAskUser(parts) {
1271
- if (!parts?.length) return false;
1272
- for (let i = parts.length - 1; i >= 0; i--) {
1273
- const part = parts[i];
1274
- if (part.type === "tool" && !part.parentId) {
1275
- return isAskUserToolName(part.name);
1276
- }
1277
- }
1278
- return false;
1279
- }
1280
- function hasTopLevelTool(parts) {
1281
- return Boolean(parts?.some((part) => part.type === "tool" && !part.parentId));
1282
- }
1283
- function questionsFromToolPart(part) {
1284
- const fromInput = parsePlanQuestionsInput(part.input);
1285
- if (fromInput.length) return fromInput;
1286
- const raw = part.result?.trim();
1287
- if (!raw || !raw.startsWith("{")) return [];
1288
- try {
1289
- return parsePlanQuestionsInput(JSON.parse(raw));
1290
- } catch {
1291
- return [];
1292
- }
1293
- }
1294
- function extractPendingPlanQuestions(parts) {
1295
- if (!parts?.length) return null;
1296
- for (let i = parts.length - 1; i >= 0; i--) {
1297
- const p = parts[i];
1298
- if (p.type !== "tool" || !isAskUserToolName(p.name)) continue;
1299
- const questions = questionsFromToolPart(p);
1300
- if (!questions.length) continue;
1301
- return {
1302
- id: p.id || `ask-${i}`,
1303
- signature: planQuestionsSignature(questions),
1304
- questions,
1305
- source: p.name || "ask_user"
1306
- };
1307
- }
1308
- return null;
1309
- }
1310
- function pendingFromAskBlock(block, dismissedQuestionSignature) {
1311
- if (!block || block.source !== "ask_user" || !block.questions?.length) return null;
1312
- const dismissed = dismissedQuestionSignature?.trim();
1313
- if (dismissed && (!block.questionSignature || block.questionSignature === dismissed)) {
1314
- return null;
1315
- }
1316
- const signature = block.questionSignature?.trim() || planQuestionsSignature(block.questions);
1317
- return {
1318
- id: `ask-block:${signature}`,
1319
- signature,
1320
- questions: block.questions,
1321
- source: "ask_user"
1322
- };
1323
- }
1324
- function askBlockStillWaiting(block, messages) {
1325
- if (!messages?.length) return Boolean(block?.at);
1326
- const askedAt = block?.at;
1327
- if (!askedAt) return false;
1328
- for (let i = messages.length - 1; i >= 0; i--) {
1329
- const message = messages[i];
1330
- if (message.role !== "user" || message.origin === "continue") continue;
1331
- if (!message.ts) return true;
1332
- return askedAt > message.ts;
1333
- }
1334
- return true;
1335
- }
1336
- function latestPendingPlanQuestions(input) {
1337
- if (input.userReplied) return null;
1338
- const fromBlock = () => pendingFromAskBlock(input.agentBlock, input.dismissedQuestionSignature);
1339
- if (lastTopLevelToolIsAskUser(input.liveParts)) {
1340
- return extractPendingPlanQuestions(input.liveParts) ?? fromBlock();
1341
- }
1342
- const last = input.messages[input.messages.length - 1];
1343
- if (last?.role === "agent" && lastTopLevelToolIsAskUser(last.parts)) {
1344
- return extractPendingPlanQuestions(last.parts) ?? fromBlock();
1345
- }
1346
- if (hasTopLevelTool(input.liveParts) || last?.role === "agent" && hasTopLevelTool(last.parts)) {
1347
- return null;
1348
- }
1349
- if (input.status === "running" || input.status === "queued") return null;
1350
- const stamped = fromBlock();
1351
- if (stamped && askBlockStillWaiting(input.agentBlock, input.messages)) {
1352
- return stamped;
1353
- }
1354
- return null;
1355
- }
1356
- var PLAN_QUESTION_ANSWERS_PREFIX = "Answers to your questions:";
1357
- function isPlanQuestionAnswersMessage(text) {
1358
- return text.startsWith(PLAN_QUESTION_ANSWERS_PREFIX);
1359
- }
1360
- function formatPlanQuestionAnswers(questions, answers) {
1361
- const lines = [PLAN_QUESTION_ANSWERS_PREFIX, ""];
1362
- for (let i = 0; i < questions.length; i++) {
1363
- const q = questions[i];
1364
- const a = answers.find((x) => x.questionIndex === i);
1365
- const header = q.header ? `**${q.header}** \u2014 ` : "";
1366
- const parts = [];
1367
- if (a?.selected.length) parts.push(a.selected.join(", "));
1368
- if (a?.other?.trim()) parts.push(a.other.trim());
1369
- const body = parts.length ? parts.join(" \xB7 ") : "(no answer)";
1370
- lines.push(`${i + 1}. ${header}${q.question} `);
1371
- lines.push(` \u2192 ${body}`);
1372
- }
1373
- return lines.join("\n");
1374
- }
1375
- function formatPlanQuestionsForChat(questions) {
1376
- const lines = ["### Questions for you", ""];
1377
- for (let i = 0; i < questions.length; i++) {
1378
- const q = questions[i];
1379
- const header = q.header ? `**${q.header}** \u2014 ` : "";
1380
- lines.push(`${i + 1}. ${header}${q.question}`);
1381
- for (let oi = 0; oi < q.options.length; oi++) {
1382
- const opt = q.options[oi];
1383
- const desc = opt.description?.trim();
1384
- lines.push(
1385
- desc ? ` - **${opt.label}** \u2014 ${desc}` : ` - **${opt.label}**`
1386
- );
1387
- }
1388
- lines.push("");
1389
- }
1390
- lines.push("_Answer in the composer below._");
1391
- return lines.join("\n").trimEnd();
1392
- }
1393
-
1394
1218
  // src/orchestrator/task-state.ts
1395
1219
  function isTerminalTaskState(state) {
1396
1220
  return state !== "submitted" && state !== "working";
@@ -1811,7 +1635,7 @@ var PORT_RANGE_SIZE = 10;
1811
1635
  var RECLAIM_RETRY_DELAY_MS = 40;
1812
1636
  var RECLAIM_TRIES = 8;
1813
1637
  async function killReclaimable(ports, worktreePath, signal) {
1814
- const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-4GVTHUUB.js");
1638
+ const { killListenersOnPorts: killListenersOnPorts2, killStaleWorktreeListeners: killStaleWorktreeListeners2 } = await import("./conductor-CP7TW6TN.js");
1815
1639
  if (worktreePath) killStaleWorktreeListeners2(ports, worktreePath, signal);
1816
1640
  else killListenersOnPorts2(ports);
1817
1641
  }
@@ -2492,17 +2316,6 @@ async function startDevServer(repoPath, worktreePath, onLine, opts) {
2492
2316
  }
2493
2317
 
2494
2318
  export {
2495
- planQuestionsSignature,
2496
- parsePlanQuestionsInput,
2497
- isAskUserToolName,
2498
- lastTopLevelToolIsAskUser,
2499
- extractPendingPlanQuestions,
2500
- askBlockStillWaiting,
2501
- latestPendingPlanQuestions,
2502
- PLAN_QUESTION_ANSWERS_PREFIX,
2503
- isPlanQuestionAnswersMessage,
2504
- formatPlanQuestionAnswers,
2505
- formatPlanQuestionsForChat,
2506
2319
  isTerminalTaskState,
2507
2320
  isIncompleteTaskState,
2508
2321
  needsCoordinatorAction,
@@ -17,17 +17,17 @@ import {
17
17
  originCli,
18
18
  resolveGhAuthToken
19
19
  } from "./chunk-YBTSZ2SW.js";
20
- import {
21
- getGithubGitAuthMode,
22
- getGithubPat
23
- } from "./chunk-D744HOI5.js";
24
20
  import {
25
21
  allocateTeamName,
26
22
  listThreads,
27
23
  normalizeTakenSlug,
28
24
  normalizeWorktreePath,
29
25
  takenSlugsFromThread
30
- } from "./chunk-Q3FHTGIW.js";
26
+ } from "./chunk-5Y2C7Q55.js";
27
+ import {
28
+ getGithubGitAuthMode,
29
+ getGithubPat
30
+ } from "./chunk-EJRCHCXM.js";
31
31
  import {
32
32
  worktreesRoot
33
33
  } from "./chunk-WOU343SI.js";
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-2TUE6JKQ.js";
8
8
  import {
9
9
  resolveAgentExecutable
10
- } from "./chunk-QPSKQP6E.js";
10
+ } from "./chunk-D446IWPP.js";
11
11
 
12
12
  // src/agents/install.ts
13
13
  import { existsSync } from "fs";
@@ -265,7 +265,7 @@ async function loginAgent(agent) {
265
265
  };
266
266
  }
267
267
  async function loginManagedAccount(accountId) {
268
- const { loadAppSettings } = await import("./app-settings-RXBH7KY4.js");
268
+ const { loadAppSettings } = await import("./app-settings-A5D364JD.js");
269
269
  const { loginEnvPrefix } = await import("./managed-accounts-JJTAKHMG.js");
270
270
  const account = loadAppSettings().accounts.accounts.find((a) => a.id === accountId);
271
271
  if (!account) {
@@ -12,13 +12,13 @@ import {
12
12
  } from "./chunk-5MXLDDYF.js";
13
13
  import {
14
14
  isOrchestratorThread
15
- } from "./chunk-YGVGXQA7.js";
15
+ } from "./chunk-Q4UPRQOS.js";
16
16
  import {
17
17
  codexUnattendedGitConfigArgs,
18
18
  mergeAgentGitAuthEnv,
19
19
  resolveAgentGitAuthEnv,
20
20
  resolveCodexGitWritableRoots
21
- } from "./chunk-75RPUXJS.js";
21
+ } from "./chunk-JKHCADKB.js";
22
22
  import {
23
23
  applyConnectedTeamToCli,
24
24
  brightsyMcpServerName,
@@ -33,12 +33,19 @@ import {
33
33
  } from "./chunk-2GPQZZLY.js";
34
34
  import {
35
35
  listAssignedLinearIssues
36
- } from "./chunk-WUCAVIIP.js";
36
+ } from "./chunk-UMXBH344.js";
37
37
  import {
38
38
  githubAgentAuthReady,
39
39
  npmGlobalNodeModules,
40
40
  run
41
41
  } from "./chunk-YBTSZ2SW.js";
42
+ import {
43
+ BASE_ALLOWED_TOOLS,
44
+ CLAUDE_CHROME_ALLOWED_TOOLS,
45
+ CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS,
46
+ CLAUDE_PRINT_BG_WAIT_CEILING_MS,
47
+ mcpAllowToolsFromNames
48
+ } from "./chunk-5Y2C7Q55.js";
42
49
  import {
43
50
  claudeChromeEnabled,
44
51
  fromInclusiveInputUsage,
@@ -49,19 +56,12 @@ import {
49
56
  requestOccupancy,
50
57
  resolveAgentExecutable,
51
58
  resolveClaudeExecutable
52
- } from "./chunk-D744HOI5.js";
59
+ } from "./chunk-EJRCHCXM.js";
53
60
  import {
54
61
  isElectronLikeCommand,
55
62
  unwrapStrippedElectronLaunch,
56
63
  wrapElectronAsNodeLaunch
57
64
  } from "./chunk-WWUABK6B.js";
58
- import {
59
- BASE_ALLOWED_TOOLS,
60
- CLAUDE_CHROME_ALLOWED_TOOLS,
61
- CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS,
62
- CLAUDE_PRINT_BG_WAIT_CEILING_MS,
63
- mcpAllowToolsFromNames
64
- } from "./chunk-Q3FHTGIW.js";
65
65
  import {
66
66
  appDataDir
67
67
  } from "./chunk-WOU343SI.js";
@@ -2966,7 +2966,7 @@ var claudeAdapter = {
2966
2966
  );
2967
2967
  }
2968
2968
  const mode = permissionMode(thread);
2969
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-FPDZKUPF.js");
2969
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-Y3UDZYJX.js");
2970
2970
  const isOrchestrator = isOrchestratorThread2(thread);
2971
2971
  const rpc = worktreeAgentRpc(isOrchestrator);
2972
2972
  const injectedServers = await buildInjectedMcpServers({
@@ -3193,7 +3193,7 @@ var claudeAdapter = {
3193
3193
  return { file: claude, args, cwd: thread.worktreePath };
3194
3194
  },
3195
3195
  async listLinearIssues(_repoPath) {
3196
- const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-Q4M7AZO2.js");
3196
+ const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-52LEDEWO.js");
3197
3197
  return listAssignedLinearIssues2();
3198
3198
  }
3199
3199
  };
@@ -4667,7 +4667,7 @@ var opencodeAdapter = {
4667
4667
  };
4668
4668
  },
4669
4669
  async listLinearIssues(_repoPath) {
4670
- const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-Q4M7AZO2.js");
4670
+ const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-52LEDEWO.js");
4671
4671
  return listAssignedLinearIssues2();
4672
4672
  }
4673
4673
  };
@@ -84,7 +84,8 @@ var BASE_ALLOWED_TOOLS = [
84
84
  "TaskStop",
85
85
  "EnterWorktree",
86
86
  "ExitWorktree",
87
- "Skill"
87
+ "Skill",
88
+ "AskUserQuestion"
88
89
  ];
89
90
  var CLAUDE_PRINT_BG_WAIT_CEILING_MS = 72e5;
90
91
  var CLAUDE_CHROME_ALLOWED_TOOLS = [
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-S5CJUIPY.js";
7
7
  import {
8
8
  listAssignedLinearIssues
9
- } from "./chunk-TMCK5TLA.js";
9
+ } from "./chunk-ATQLP22S.js";
10
10
  import {
11
11
  looksLikeConversationSummary,
12
12
  looksLikeSkillBody,
@@ -15,13 +15,13 @@ import {
15
15
  } from "./chunk-OOXRMTU6.js";
16
16
  import {
17
17
  isOrchestratorThread
18
- } from "./chunk-FWVUGLBG.js";
18
+ } from "./chunk-RDXODLEN.js";
19
19
  import {
20
20
  codexUnattendedGitConfigArgs,
21
21
  mergeAgentGitAuthEnv,
22
22
  resolveAgentGitAuthEnv,
23
23
  resolveCodexGitWritableRoots
24
- } from "./chunk-KECHK3ZT.js";
24
+ } from "./chunk-R2C45NHT.js";
25
25
  import {
26
26
  loadBrightsyConfig
27
27
  } from "./chunk-RSA47QYR.js";
@@ -34,7 +34,7 @@ import {
34
34
  CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS,
35
35
  CLAUDE_PRINT_BG_WAIT_CEILING_MS,
36
36
  mcpAllowToolsFromNames
37
- } from "./chunk-F2PVRF3B.js";
37
+ } from "./chunk-N6ZF3XRP.js";
38
38
  import {
39
39
  CURSOR_SDK_INSTALL_HINT,
40
40
  applyAgentRunnerHeapEnv,
@@ -80,7 +80,7 @@ import {
80
80
  requestOccupancy,
81
81
  resolveAgentExecutable,
82
82
  resolveClaudeExecutable
83
- } from "./chunk-QPSKQP6E.js";
83
+ } from "./chunk-D446IWPP.js";
84
84
  import {
85
85
  isElectronLikeCommand,
86
86
  unwrapStrippedElectronLaunch
@@ -2659,7 +2659,7 @@ var claudeAdapter = {
2659
2659
  );
2660
2660
  }
2661
2661
  const mode = permissionMode(thread);
2662
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-UIEXAG2B.js");
2662
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-4CTLU2BV.js");
2663
2663
  const isOrchestrator = isOrchestratorThread2(thread);
2664
2664
  const rpc = worktreeAgentRpc(isOrchestrator);
2665
2665
  const injectedServers = await buildInjectedMcpServers({
@@ -2886,7 +2886,7 @@ var claudeAdapter = {
2886
2886
  return { file: claude, args, cwd: thread.worktreePath };
2887
2887
  },
2888
2888
  async listLinearIssues(_repoPath) {
2889
- const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-A37WLUBO.js");
2889
+ const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-FGVN65JU.js");
2890
2890
  return listAssignedLinearIssues2();
2891
2891
  }
2892
2892
  };
@@ -3977,7 +3977,7 @@ var opencodeAdapter = {
3977
3977
  };
3978
3978
  },
3979
3979
  async listLinearIssues(_repoPath) {
3980
- const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-A37WLUBO.js");
3980
+ const { listAssignedLinearIssues: listAssignedLinearIssues2 } = await import("./linear-list-FGVN65JU.js");
3981
3981
  return listAssignedLinearIssues2();
3982
3982
  }
3983
3983
  };
@@ -7,11 +7,20 @@ import {
7
7
  resolveGithubRepoSlug,
8
8
  resolveOriginRemote,
9
9
  resolveRepoRoot
10
- } from "./chunk-75RPUXJS.js";
10
+ } from "./chunk-JKHCADKB.js";
11
11
  import {
12
12
  ATTACHMENTS_DIR,
13
13
  attachmentsGitignoreBody
14
14
  } from "./chunk-N2WW62LF.js";
15
+ import {
16
+ allocateTeamName,
17
+ createEmptyThread,
18
+ listThreads,
19
+ takenSlugsFromThread,
20
+ teamSlugFromName,
21
+ updateThread,
22
+ writeThread
23
+ } from "./chunk-5Y2C7Q55.js";
15
24
  import {
16
25
  assertOrchestratorCapableAgent,
17
26
  formatAccountProfilePlaybookLine,
@@ -24,16 +33,7 @@ import {
24
33
  resolveThreadDefaults,
25
34
  resolveViewerProfile,
26
35
  resolveViewerProfileForRepo
27
- } from "./chunk-D744HOI5.js";
28
- import {
29
- allocateTeamName,
30
- createEmptyThread,
31
- listThreads,
32
- takenSlugsFromThread,
33
- teamSlugFromName,
34
- updateThread,
35
- writeThread
36
- } from "./chunk-Q3FHTGIW.js";
36
+ } from "./chunk-EJRCHCXM.js";
37
37
  import {
38
38
  appDataDir,
39
39
  globalAgentCwd,
@@ -357,7 +357,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
357
357
  "- get_viewer_context / update_viewer_context \u2014 read or replace Settings \u2192 Agents (account) and Settings \u2192 Projects (per-repo) context. You can update a project: pass scope=project and repoPath from list_projects (this cwd is not a project). update_viewer_context requires confirmed=true after ask_user. Never write context unprompted.",
358
358
  "- list_env / set_env / delete_env \u2014 Settings \u2192 Environment. scope=project requires repoPath from list_projects and stores the key under that project prefix (the project name, uppercased, plus _). APPLE_ID for sideboard is SIDEBOARD_APPLE_ID. scope=account is shared by every project and is not prefixed. list_env returns names only.",
359
359
  "- set_caffeinate \u2014 keep this Mac awake across turns (macOS caffeinate). Turn on for phone remote / away-from-keyboard work, overnight schedules, or when the user will be away. Turn OFF when they say they are done, wrapping up, going to sleep, or no longer need the machine awake. Closing this chat also releases it.",
360
- "- list_schedules / create_schedule / update_schedule / delete_schedule / run_schedule \u2014 automations that send a prompt to a chat (chatId or self) or start a new Global chat (omit chatId). One-shot `at`, interval `every` (15m/1h/6h/1d), clock time `time` + `days` (07:30 and weekdays, or mon,wed), or 5-field `cron`. Recurring jobs without chatId open a new chat each run and archive it when that run finishes unless archiveChat is false (leave the chat open to keep talking). History keeps the last 5 archived runs for that automation. Worktree agents have the same tools (`chatId=self` continues that coding chat). Jobs fire only while Sideboard.app is running; sleep skips until wake. Creating or enabling a future job turns on Settings \u2192 Advanced \u2192 Caffeinate while automations are enabled (or call set_caffeinate). The desktop lists them in the sidebar after Board.",
360
+ "- list_schedules / create_schedule / update_schedule / delete_schedule / run_schedule \u2014 automations that send a prompt to a chat (chatId or self) or start a new Global chat (omit chatId). A job bound to a chat is removed when that chat is archived. Omit chatId only for a Global automation that should outlive the chat. One-shot `at`, interval `every` (15m/1h/6h/1d), clock time `time` + `days` (07:30 and weekdays, or mon,wed), or 5-field `cron`. Recurring jobs without chatId open a new chat each run and archive it when that run finishes unless archiveChat is false (leave the chat open to keep talking). History keeps the last 5 archived runs for that automation. Worktree agents have the same tools (`chatId=self` continues that coding chat and is removed when that chat is archived). Jobs fire only while Sideboard.app is running; sleep skips until wake. Creating or enabling a future job turns on Settings \u2192 Advanced \u2192 Caffeinate while automations are enabled (or call set_caffeinate). The desktop lists them in the sidebar after Board.",
361
361
  "Projects:",
362
362
  "- add_project / remove_project \u2014 register or unregister a git repo",
363
363
  "Workspaces and chats:",
@@ -2,11 +2,11 @@ import {
2
2
  OPTIONAL_SERVICES,
3
3
  isOptionalServiceId,
4
4
  optionalServiceSpec
5
- } from "./chunk-B244TJWC.js";
5
+ } from "./chunk-ECY7WL6T.js";
6
6
  import {
7
7
  installNpmGlobalPackage,
8
8
  whichOnPath
9
- } from "./chunk-4H5MWZ6J.js";
9
+ } from "./chunk-KLVW3J2B.js";
10
10
  import {
11
11
  enrichPathWithNpmGlobalBin
12
12
  } from "./chunk-2TUE6JKQ.js";
@@ -4,7 +4,7 @@ import {
4
4
  normalizeTakenSlug,
5
5
  normalizeWorktreePath,
6
6
  takenSlugsFromThread
7
- } from "./chunk-ZSHS46V5.js";
7
+ } from "./chunk-Y6OHM672.js";
8
8
  import {
9
9
  ensureWorktreeSideboardIgnored
10
10
  } from "./chunk-QKHEVSB5.js";
@@ -25,7 +25,7 @@ import {
25
25
  import {
26
26
  getGithubGitAuthMode,
27
27
  getGithubPat
28
- } from "./chunk-QPSKQP6E.js";
28
+ } from "./chunk-D446IWPP.js";
29
29
  import {
30
30
  worktreesRoot
31
31
  } from "./chunk-H4UEFJRI.js";
@@ -5,7 +5,7 @@ import {
5
5
  resolveGithubRepoSlug,
6
6
  resolveOriginRemote,
7
7
  resolveRepoRoot
8
- } from "./chunk-KECHK3ZT.js";
8
+ } from "./chunk-R2C45NHT.js";
9
9
  import {
10
10
  allocateTeamName,
11
11
  createEmptyThread,
@@ -14,7 +14,7 @@ import {
14
14
  teamSlugFromName,
15
15
  updateThread,
16
16
  writeThread
17
- } from "./chunk-ZSHS46V5.js";
17
+ } from "./chunk-Y6OHM672.js";
18
18
  import {
19
19
  ATTACHMENTS_DIR,
20
20
  attachmentsGitignoreBody
@@ -31,7 +31,7 @@ import {
31
31
  resolveThreadDefaults,
32
32
  resolveViewerProfile,
33
33
  resolveViewerProfileForRepo
34
- } from "./chunk-QPSKQP6E.js";
34
+ } from "./chunk-D446IWPP.js";
35
35
  import {
36
36
  appDataDir,
37
37
  globalAgentCwd,
@@ -402,7 +402,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
402
402
  "- get_viewer_context / update_viewer_context \u2014 read or replace Settings \u2192 Agents (account) and Settings \u2192 Projects (per-repo) context. You can update a project: pass scope=project and repoPath from list_projects (this cwd is not a project). update_viewer_context requires confirmed=true after ask_user. Never write context unprompted.",
403
403
  "- list_env / set_env / delete_env \u2014 Settings \u2192 Environment. scope=project requires repoPath from list_projects and stores the key under that project prefix (the project name, uppercased, plus _). APPLE_ID for sideboard is SIDEBOARD_APPLE_ID. scope=account is shared by every project and is not prefixed. list_env returns names only.",
404
404
  "- set_caffeinate \u2014 keep this Mac awake across turns (macOS caffeinate). Turn on for phone remote / away-from-keyboard work, overnight schedules, or when the user will be away. Turn OFF when they say they are done, wrapping up, going to sleep, or no longer need the machine awake. Closing this chat also releases it.",
405
- "- list_schedules / create_schedule / update_schedule / delete_schedule / run_schedule \u2014 automations that send a prompt to a chat (chatId or self) or start a new Global chat (omit chatId). One-shot `at`, interval `every` (15m/1h/6h/1d), clock time `time` + `days` (07:30 and weekdays, or mon,wed), or 5-field `cron`. Recurring jobs without chatId open a new chat each run and archive it when that run finishes unless archiveChat is false (leave the chat open to keep talking). History keeps the last 5 archived runs for that automation. Worktree agents have the same tools (`chatId=self` continues that coding chat). Jobs fire only while Sideboard.app is running; sleep skips until wake. Creating or enabling a future job turns on Settings \u2192 Advanced \u2192 Caffeinate while automations are enabled (or call set_caffeinate). The desktop lists them in the sidebar after Board.",
405
+ "- list_schedules / create_schedule / update_schedule / delete_schedule / run_schedule \u2014 automations that send a prompt to a chat (chatId or self) or start a new Global chat (omit chatId). A job bound to a chat is removed when that chat is archived. Omit chatId only for a Global automation that should outlive the chat. One-shot `at`, interval `every` (15m/1h/6h/1d), clock time `time` + `days` (07:30 and weekdays, or mon,wed), or 5-field `cron`. Recurring jobs without chatId open a new chat each run and archive it when that run finishes unless archiveChat is false (leave the chat open to keep talking). History keeps the last 5 archived runs for that automation. Worktree agents have the same tools (`chatId=self` continues that coding chat and is removed when that chat is archived). Jobs fire only while Sideboard.app is running; sleep skips until wake. Creating or enabling a future job turns on Settings \u2192 Advanced \u2192 Caffeinate while automations are enabled (or call set_caffeinate). The desktop lists them in the sidebar after Board.",
406
406
  "Projects:",
407
407
  "- add_project / remove_project \u2014 register or unregister a git repo",
408
408
  "Workspaces and chats:",