@sideboard-ai/core 0.1.284 → 0.1.286

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 (54) hide show
  1. package/dist/{abletime-WLDBJJUI.js → abletime-4CH2IOX5.js} +4 -4
  2. package/dist/{abletime-X64E3GUJ.js → abletime-I4RODUKT.js} +4 -4
  3. package/dist/{abletime-oauth-AXR676W5.js → abletime-oauth-7OZZ3ABX.js} +3 -3
  4. package/dist/{abletime-oauth-UWOCEICP.js → abletime-oauth-C2HN2Q6F.js} +3 -3
  5. package/dist/{abletime-rest-S4XWEXV2.js → abletime-rest-E4LBRFLM.js} +3 -3
  6. package/dist/{abletime-rest-LPUDJUEP.js → abletime-rest-WFI2HWBU.js} +3 -3
  7. package/dist/agents/cursor-runner.cjs +48 -11
  8. package/dist/agents/cursor-runner.js +48 -11
  9. package/dist/{agents-6U2RQK7P.js → agents-BHUXZ7XO.js} +5 -5
  10. package/dist/{agents-PM5ICSO3.js → agents-QNIFTZPN.js} +5 -5
  11. package/dist/chunk-2GPQZZLY.js +59 -0
  12. package/dist/{chunk-ROPGQRPU.js → chunk-33KDPEK4.js} +1 -1
  13. package/dist/{chunk-BSN6DJ4L.js → chunk-3H5U4QLD.js} +5 -5
  14. package/dist/{chunk-I6HSGKMZ.js → chunk-5T4YWFLD.js} +2 -2
  15. package/dist/{chunk-U7HAVAGJ.js → chunk-6CVVNAIU.js} +2 -2
  16. package/dist/{chunk-TQRSVE7D.js → chunk-7IAMHN2N.js} +1 -1
  17. package/dist/{chunk-BMUVNTT4.js → chunk-ABOH7GBG.js} +2 -2
  18. package/dist/{chunk-OEJQK7CY.js → chunk-CBIUGGPI.js} +14 -13
  19. package/dist/{chunk-VA55JG2I.js → chunk-DEJALWKM.js} +5 -5
  20. package/dist/{chunk-LMWPVC5L.js → chunk-ETZPTOK7.js} +2 -2
  21. package/dist/{chunk-WQ4M2L44.js → chunk-HJNFK5SP.js} +16 -15
  22. package/dist/{chunk-XTPQEZZA.js → chunk-IJMUYHPT.js} +3 -3
  23. package/dist/chunk-JAT3JFOS.js +61 -0
  24. package/dist/{chunk-DGPROCE5.js → chunk-LS4FFCPL.js} +3 -3
  25. package/dist/{chunk-WY2IAB7J.js → chunk-MGJ7R7UX.js} +45 -1
  26. package/dist/{chunk-COQLZNKQ.js → chunk-PCNH74SF.js} +5 -5
  27. package/dist/{chunk-P2BSMNHB.js → chunk-PXMLMBMI.js} +1 -1
  28. package/dist/{chunk-BS3QLVPL.js → chunk-TMM4FEZ5.js} +3 -3
  29. package/dist/{chunk-2SJXQ4UX.js → chunk-ULSY2BJF.js} +45 -1
  30. package/dist/{chunk-GWFVCCJZ.js → chunk-VGNLMGBK.js} +6 -6
  31. package/dist/{chunk-PY4UCMRI.js → chunk-VQEARG5H.js} +5 -5
  32. package/dist/{conductor-MU3TYVCD.js → conductor-RBJYEF7L.js} +2 -2
  33. package/dist/{conductor-GBX6LSP2.js → conductor-WYOWFB7I.js} +2 -2
  34. package/dist/{connected-teams-JIUOSZ6C.js → connected-teams-AB7ZHJVO.js} +3 -3
  35. package/dist/{connected-teams-RU6VATCM.js → connected-teams-BJ6PMIST.js} +3 -3
  36. package/dist/{coordinator-prompt-SVVGU6AZ.js → coordinator-prompt-5DE3XBNT.js} +1 -1
  37. package/dist/{coordinator-prompt-4DJIHSE6.js → coordinator-prompt-R42WEL3T.js} +1 -1
  38. package/dist/{global-workspace-XON4YZXE.js → global-workspace-IPIEC6FM.js} +1 -1
  39. package/dist/{global-workspace-UPUDWIS6.js → global-workspace-NXMYLS34.js} +1 -1
  40. package/dist/index.cjs +300 -155
  41. package/dist/index.d.cts +16 -3
  42. package/dist/index.d.ts +16 -3
  43. package/dist/index.js +177 -98
  44. package/dist/mcp/run-stdio.cjs +121 -58
  45. package/dist/mcp/run-stdio.js +10 -10
  46. package/dist/{oauth-S3M7B475.js → oauth-DP4ZV2M2.js} +2 -2
  47. package/dist/{oauth-K6CWZEQO.js → oauth-WCUZ6Z5G.js} +2 -2
  48. package/dist/{orchestrator-6YVY6T5I.js → orchestrator-65QGA6BB.js} +7 -7
  49. package/dist/{orchestrator-CRBIW2RG.js → orchestrator-YEZV35G7.js} +7 -7
  50. package/dist/{workspaces-F76BWCSI.js → workspaces-5C5ESWPU.js} +5 -1
  51. package/dist/{workspaces-7AJ5RZ3P.js → workspaces-LIFFWK23.js} +5 -1
  52. package/package.json +1 -1
  53. package/dist/chunk-N7WZ6NIN.js +0 -41
  54. package/dist/chunk-VKQGAWHY.js +0 -40
@@ -9420,6 +9420,8 @@ var init_stage_files = __esm({
9420
9420
  var workspaces_exports = {};
9421
9421
  __export(workspaces_exports, {
9422
9422
  addWorkspace: () => addWorkspace,
9423
+ archiveRemovedWorkspaceChats: () => archiveRemovedWorkspaceChats,
9424
+ archivesWithRemovedWorkspace: () => archivesWithRemovedWorkspace,
9423
9425
  ensureWorkspace: () => ensureWorkspace,
9424
9426
  isRemovedWorkspace: () => isRemovedWorkspace,
9425
9427
  listWorkspaces: () => listWorkspaces,
@@ -9476,10 +9478,33 @@ function sameWorkspacePath(a, b) {
9476
9478
  if (primaryB && primaryB === left) return true;
9477
9479
  return false;
9478
9480
  }
9481
+ function pathIsInside(parent, child) {
9482
+ const root = parent.replace(/\/+$/, "");
9483
+ const path = child.replace(/\/+$/, "");
9484
+ if (!root || !path) return false;
9485
+ return path === root || path.startsWith(`${root}/`);
9486
+ }
9487
+ function defaultWorktreesRoot(repoPath) {
9488
+ const slug = (0, import_node_path23.basename)(repoPath.replace(/\/+$/, "")) || "repo";
9489
+ return (0, import_node_path23.join)((0, import_node_os8.homedir)(), "sideboard", "workspaces", slug);
9490
+ }
9491
+ function removedWorktreeCoversRepo(saved, repoPath) {
9492
+ if (!saved || !repoPath) return false;
9493
+ if (pathIsInside(defaultWorktreesRoot(repoPath), saved)) return true;
9494
+ try {
9495
+ const custom = loadRepoSettings(repoPath)?.worktreesRoot;
9496
+ if (custom && pathIsInside(custom, saved)) return true;
9497
+ } catch {
9498
+ }
9499
+ return false;
9500
+ }
9479
9501
  function removedMatches(saved, repoPath) {
9480
9502
  if (saved === repoPath || sameWorkspacePath(saved, repoPath)) return true;
9481
9503
  const primary = primaryCheckoutFromLinkedWorktree(repoPath);
9482
- return Boolean(primary && sameWorkspacePath(saved, primary));
9504
+ if (primary && (sameWorkspacePath(saved, primary) || removedWorktreeCoversRepo(saved, primary))) {
9505
+ return true;
9506
+ }
9507
+ return removedWorktreeCoversRepo(saved, repoPath);
9483
9508
  }
9484
9509
  function isRemovedWorkspace(repoPath) {
9485
9510
  if (!repoPath) return false;
@@ -9488,6 +9513,10 @@ function isRemovedWorkspace(repoPath) {
9488
9513
  }
9489
9514
  return false;
9490
9515
  }
9516
+ function archivesWithRemovedWorkspace(threadRepoPath, removedPath) {
9517
+ if (!threadRepoPath || isGlobalRepoPath(threadRepoPath)) return false;
9518
+ return isRemovedWorkspace(threadRepoPath) || sameWorkspacePath(threadRepoPath, removedPath);
9519
+ }
9491
9520
  function rememberRemoved(repoPath) {
9492
9521
  const next = readRemoved();
9493
9522
  const before = next.size;
@@ -9495,6 +9524,8 @@ function rememberRemoved(repoPath) {
9495
9524
  next.add(canon);
9496
9525
  const raw = repoPath.replace(/\/+$/, "");
9497
9526
  if (raw && raw !== canon) next.add(raw);
9527
+ const primary = primaryCheckoutFromLinkedWorktree(repoPath) ?? (canon !== repoPath ? primaryCheckoutFromLinkedWorktree(canon) : null);
9528
+ if (primary) next.add(primary);
9498
9529
  if (next.size !== before) writeRemoved(next);
9499
9530
  }
9500
9531
  function forgetRemoved(repoPath) {
@@ -9627,12 +9658,25 @@ function syncWorkspacesFromThreads(repoPaths) {
9627
9658
  if (dirty) writeAll(next);
9628
9659
  return next.sort((a, b) => a.name.localeCompare(b.name));
9629
9660
  }
9630
- var import_node_fs20, import_node_path23;
9661
+ async function archiveRemovedWorkspaceChats(threads, archive) {
9662
+ const failures = [];
9663
+ for (const thread of threads) {
9664
+ try {
9665
+ await archive(thread.id);
9666
+ } catch (err) {
9667
+ failures.push(err instanceof Error ? err.message : String(err));
9668
+ }
9669
+ }
9670
+ if (failures.length > 0) throw new Error(failures.join("\n"));
9671
+ }
9672
+ var import_node_fs20, import_node_os8, import_node_path23;
9631
9673
  var init_workspaces = __esm({
9632
9674
  "src/store/workspaces.ts"() {
9633
9675
  "use strict";
9634
9676
  import_node_fs20 = require("fs");
9677
+ import_node_os8 = require("os");
9635
9678
  import_node_path23 = require("path");
9679
+ init_settings();
9636
9680
  init_paths();
9637
9681
  init_global_workspace();
9638
9682
  init_worktree();
@@ -10215,7 +10259,7 @@ var init_turn_trace = __esm({
10215
10259
  function brightsyConfigPath() {
10216
10260
  const override = process.env.BRIGHTSY_CONFIG?.trim();
10217
10261
  if (override) return override;
10218
- return (0, import_node_path26.join)((0, import_node_os8.homedir)(), ".brightsy", "config.json");
10262
+ return (0, import_node_path26.join)((0, import_node_os9.homedir)(), ".brightsy", "config.json");
10219
10263
  }
10220
10264
  function loadBrightsyConfig() {
10221
10265
  const path = brightsyConfigPath();
@@ -10234,12 +10278,12 @@ function saveBrightsyConfig(cfg) {
10234
10278
  mode: 384
10235
10279
  });
10236
10280
  }
10237
- var import_node_fs23, import_node_os8, import_node_path26;
10281
+ var import_node_fs23, import_node_os9, import_node_path26;
10238
10282
  var init_config = __esm({
10239
10283
  "src/brightsy/config.ts"() {
10240
10284
  "use strict";
10241
10285
  import_node_fs23 = require("fs");
10242
- import_node_os8 = require("os");
10286
+ import_node_os9 = require("os");
10243
10287
  import_node_path26 = require("path");
10244
10288
  }
10245
10289
  });
@@ -10254,30 +10298,49 @@ var init_accounts = __esm({
10254
10298
  });
10255
10299
 
10256
10300
  // src/http/fetch.ts
10257
- function tlsIssuerHint(code, message) {
10258
- const text7 = `${code ?? ""} ${message}`;
10259
- return TLS_ISSUER_RE.test(text7) ? TLS_ISSUER_HINT : "";
10301
+ function isTlsIssuerFailure(code, message) {
10302
+ return TLS_ISSUER_RE.test(`${code ?? ""} ${message}`);
10260
10303
  }
10261
- function formatFetchError(err, url) {
10262
- if (!(err instanceof Error)) return `${String(err)} (${url})`;
10263
- const cause = err.cause;
10264
- let detail = "";
10265
- let hint = tlsIssuerHint(void 0, err.message);
10304
+ function describeCause(cause, depth = 0) {
10305
+ if (depth > 5 || cause == null) return null;
10306
+ if (cause instanceof AggregateError) {
10307
+ for (const item of cause.errors) {
10308
+ const found = describeCause(item, depth + 1);
10309
+ if (found && (found.code || found.message)) return found;
10310
+ }
10311
+ return cause.message ? { message: cause.message } : null;
10312
+ }
10266
10313
  if (cause instanceof Error) {
10267
10314
  const code = typeof cause.code === "string" ? cause.code : void 0;
10268
- detail = code ? ` [${code}: ${cause.message}]` : ` [${cause.message}]`;
10269
- hint = tlsIssuerHint(code, `${err.message} ${cause.message}`) || hint;
10270
- } else if (cause != null) {
10271
- detail = ` [${String(cause)}]`;
10272
- hint = tlsIssuerHint(void 0, String(cause)) || hint;
10273
- }
10274
- return `${err.message}${detail} (${url})${hint}`;
10315
+ const nested = describeCause(cause.cause, depth + 1);
10316
+ if ((!cause.message || cause.message === "fetch failed") && nested) return nested;
10317
+ if (cause.message || code) return { code, message: cause.message };
10318
+ return nested;
10319
+ }
10320
+ return { message: String(cause) };
10321
+ }
10322
+ function causeSuffix(detail) {
10323
+ if (!detail) return "";
10324
+ if (detail.code && detail.message) return ` [${detail.code}: ${detail.message}]`;
10325
+ if (detail.code) return ` [${detail.code}]`;
10326
+ if (detail.message) return ` [${detail.message}]`;
10327
+ return "";
10328
+ }
10329
+ function formatFetchError(err, url, opts) {
10330
+ if (!(err instanceof Error)) return `${String(err)} (${url})`;
10331
+ const detail = describeCause(err.cause);
10332
+ const hintSource = `${err.message} ${detail?.code ?? ""} ${detail?.message ?? ""}`;
10333
+ const tls2 = isTlsIssuerFailure(detail?.code, hintSource);
10334
+ const hint = tls2 ? opts?.tlsHint ?? TLS_ISSUER_HINT : "";
10335
+ return `${err.message}${causeSuffix(detail)} (${url})${hint}`;
10336
+ }
10337
+ function currentHttpFetch() {
10338
+ return injected ?? globalThis.fetch.bind(globalThis);
10275
10339
  }
10276
10340
  async function httpFetch(input, init) {
10277
10341
  const url = typeof input === "string" ? input : input.href;
10278
- const fn = injected ?? globalThis.fetch.bind(globalThis);
10279
10342
  try {
10280
- return await fn(url, init);
10343
+ return await currentHttpFetch()(url, init);
10281
10344
  } catch (err) {
10282
10345
  throw new Error(formatFetchError(err, url));
10283
10346
  }
@@ -11268,7 +11331,7 @@ function versionDirNodeBins(root, toBin) {
11268
11331
  return [];
11269
11332
  }
11270
11333
  }
11271
- function defaultNodeBinCandidates(home = (0, import_node_os9.homedir)()) {
11334
+ function defaultNodeBinCandidates(home = (0, import_node_os10.homedir)()) {
11272
11335
  const kegs = ["/opt/homebrew", "/usr/local"].flatMap(
11273
11336
  (prefix) => PREFERRED_LTS_MAJORS.map((major) => (0, import_node_path29.join)(prefix, "opt", `node@${major}`, "bin", "node"))
11274
11337
  );
@@ -11383,12 +11446,12 @@ async function resolveNodeLaunch(scriptPath) {
11383
11446
  env: { ELECTRON_RUN_AS_NODE: "1" }
11384
11447
  };
11385
11448
  }
11386
- var import_node_fs27, import_node_os9, import_node_path29, AGENT_RUNNER_MAX_OLD_SPACE_MB, MAX_OLD_SPACE_FLAG, PREFERRED_LTS_MAJORS;
11449
+ var import_node_fs27, import_node_os10, import_node_path29, AGENT_RUNNER_MAX_OLD_SPACE_MB, MAX_OLD_SPACE_FLAG, PREFERRED_LTS_MAJORS;
11387
11450
  var init_node_launch = __esm({
11388
11451
  "src/agents/node-launch.ts"() {
11389
11452
  "use strict";
11390
11453
  import_node_fs27 = require("fs");
11391
- import_node_os9 = require("os");
11454
+ import_node_os10 = require("os");
11392
11455
  import_node_path29 = require("path");
11393
11456
  init_nested_electron_env();
11394
11457
  init_system_ca();
@@ -11687,18 +11750,18 @@ function mcpServersRecord(servers, extraServers) {
11687
11750
  function writeMcpServersConfig(servers, extraServers) {
11688
11751
  const mcpServers = mcpServersRecord(servers, extraServers);
11689
11752
  if (Object.keys(mcpServers).length === 0) return null;
11690
- const dir = (0, import_node_fs28.mkdtempSync)((0, import_node_path30.join)((0, import_node_os10.tmpdir)(), "sideboard-mcp-"));
11753
+ const dir = (0, import_node_fs28.mkdtempSync)((0, import_node_path30.join)((0, import_node_os11.tmpdir)(), "sideboard-mcp-"));
11691
11754
  const cfgPath = (0, import_node_path30.join)(dir, "mcp.json");
11692
11755
  (0, import_node_fs28.writeFileSync)(cfgPath, JSON.stringify({ mcpServers }, null, 2));
11693
11756
  return cfgPath;
11694
11757
  }
11695
- var import_node_fs28, import_node_module, import_node_os10, import_node_path30, import_node_url, import_meta, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS, SIDEBOARD_GITHUB_MCP_ALLOWED_TOOLS, SIDEBOARD_LINEAR_MCP_ALLOWED_TOOLS, SIDEBOARD_ABLETIME_MCP_ALLOWED_TOOLS, brightsyMcpCommandCache, BRIGHTSY_WORD;
11758
+ var import_node_fs28, import_node_module, import_node_os11, import_node_path30, import_node_url, import_meta, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS, SIDEBOARD_GITHUB_MCP_ALLOWED_TOOLS, SIDEBOARD_LINEAR_MCP_ALLOWED_TOOLS, SIDEBOARD_ABLETIME_MCP_ALLOWED_TOOLS, brightsyMcpCommandCache, BRIGHTSY_WORD;
11696
11759
  var init_injected_mcp = __esm({
11697
11760
  "src/agents/injected-mcp.ts"() {
11698
11761
  "use strict";
11699
11762
  import_node_fs28 = require("fs");
11700
11763
  import_node_module = require("module");
11701
- import_node_os10 = require("os");
11764
+ import_node_os11 = require("os");
11702
11765
  import_node_path30 = require("path");
11703
11766
  import_node_url = require("url");
11704
11767
  init_run();
@@ -11751,14 +11814,14 @@ var init_injected_mcp = __esm({
11751
11814
 
11752
11815
  // src/agents/user-mcp-config.ts
11753
11816
  function userClaudeMcpConfigPath() {
11754
- return (0, import_node_path31.join)((0, import_node_os11.homedir)(), ".claude.json");
11817
+ return (0, import_node_path31.join)((0, import_node_os12.homedir)(), ".claude.json");
11755
11818
  }
11756
- var import_node_fs29, import_node_os11, import_node_path31;
11819
+ var import_node_fs29, import_node_os12, import_node_path31;
11757
11820
  var init_user_mcp_config = __esm({
11758
11821
  "src/agents/user-mcp-config.ts"() {
11759
11822
  "use strict";
11760
11823
  import_node_fs29 = require("fs");
11761
- import_node_os11 = require("os");
11824
+ import_node_os12 = require("os");
11762
11825
  import_node_path31 = require("path");
11763
11826
  init_paths();
11764
11827
  init_injected_mcp();
@@ -11799,10 +11862,10 @@ function readText(path) {
11799
11862
  return "";
11800
11863
  }
11801
11864
  }
11802
- function userCodexConfigPaths(home = (0, import_node_os12.homedir)()) {
11865
+ function userCodexConfigPaths(home = (0, import_node_os13.homedir)()) {
11803
11866
  return [(0, import_node_path32.join)(home, ".codex", "config.toml"), (0, import_node_path32.join)(home, ".config", "codex", "config.toml")];
11804
11867
  }
11805
- function userOpencodeConfigPaths(home = (0, import_node_os12.homedir)()) {
11868
+ function userOpencodeConfigPaths(home = (0, import_node_os13.homedir)()) {
11806
11869
  return [
11807
11870
  (0, import_node_path32.join)(home, ".config", "opencode", "opencode.json"),
11808
11871
  (0, import_node_path32.join)(home, ".config", "opencode", "opencode.jsonc")
@@ -11824,7 +11887,7 @@ function userMcpNamesToDisable(opts) {
11824
11887
  }
11825
11888
  return out;
11826
11889
  }
11827
- function listUserCodexMcpNames(home = (0, import_node_os12.homedir)()) {
11890
+ function listUserCodexMcpNames(home = (0, import_node_os13.homedir)()) {
11828
11891
  const names = [];
11829
11892
  for (const path of userCodexConfigPaths(home)) {
11830
11893
  if (!(0, import_node_fs30.existsSync)(path)) continue;
@@ -11832,7 +11895,7 @@ function listUserCodexMcpNames(home = (0, import_node_os12.homedir)()) {
11832
11895
  }
11833
11896
  return names;
11834
11897
  }
11835
- function listUserOpencodeMcpNames(home = (0, import_node_os12.homedir)()) {
11898
+ function listUserOpencodeMcpNames(home = (0, import_node_os13.homedir)()) {
11836
11899
  const names = [];
11837
11900
  for (const path of userOpencodeConfigPaths(home)) {
11838
11901
  if (!(0, import_node_fs30.existsSync)(path)) continue;
@@ -11840,12 +11903,12 @@ function listUserOpencodeMcpNames(home = (0, import_node_os12.homedir)()) {
11840
11903
  }
11841
11904
  return names;
11842
11905
  }
11843
- function userClaudeMcpConfigObject(home = (0, import_node_os12.homedir)()) {
11844
- const claudePath = home === (0, import_node_os12.homedir)() ? userClaudeMcpConfigPath() : (0, import_node_path32.join)(home, ".claude.json");
11906
+ function userClaudeMcpConfigObject(home = (0, import_node_os13.homedir)()) {
11907
+ const claudePath = home === (0, import_node_os13.homedir)() ? userClaudeMcpConfigPath() : (0, import_node_path32.join)(home, ".claude.json");
11845
11908
  if (!(0, import_node_fs30.existsSync)(claudePath)) return {};
11846
11909
  return asObject(asObject(readJsonObject2(claudePath)).mcpServers);
11847
11910
  }
11848
- function listUserClaudeMcpServerEntries(home = (0, import_node_os12.homedir)()) {
11911
+ function listUserClaudeMcpServerEntries(home = (0, import_node_os13.homedir)()) {
11849
11912
  const out = {};
11850
11913
  for (const [rawName, value] of Object.entries(userClaudeMcpConfigObject(home))) {
11851
11914
  const name = rawName.trim();
@@ -11875,12 +11938,12 @@ function toCodexUnattendedAppsArgs() {
11875
11938
  "features.plugins=false"
11876
11939
  ];
11877
11940
  }
11878
- var import_node_fs30, import_node_os12, import_node_path32, import_smol_toml2;
11941
+ var import_node_fs30, import_node_os13, import_node_path32, import_smol_toml2;
11879
11942
  var init_orch_mcp_isolation = __esm({
11880
11943
  "src/agents/orch-mcp-isolation.ts"() {
11881
11944
  "use strict";
11882
11945
  import_node_fs30 = require("fs");
11883
- import_node_os12 = require("os");
11946
+ import_node_os13 = require("os");
11884
11947
  import_node_path32 = require("path");
11885
11948
  import_smol_toml2 = require("smol-toml");
11886
11949
  init_user_mcp_config();
@@ -12885,8 +12948,8 @@ function usageFromCodex(usage) {
12885
12948
  }
12886
12949
  function codexConfigHasNetworkAccess() {
12887
12950
  const candidates = [
12888
- (0, import_node_path35.join)((0, import_node_os13.homedir)(), ".codex", "config.toml"),
12889
- (0, import_node_path35.join)((0, import_node_os13.homedir)(), ".config", "codex", "config.toml")
12951
+ (0, import_node_path35.join)((0, import_node_os14.homedir)(), ".codex", "config.toml"),
12952
+ (0, import_node_path35.join)((0, import_node_os14.homedir)(), ".config", "codex", "config.toml")
12890
12953
  ];
12891
12954
  for (const path of candidates) {
12892
12955
  if (!(0, import_node_fs34.existsSync)(path)) continue;
@@ -12922,7 +12985,7 @@ function asRecord3(value) {
12922
12985
  return void 0;
12923
12986
  }
12924
12987
  function codexLooksAuthenticated() {
12925
- const authPath = (0, import_node_path35.join)((0, import_node_os13.homedir)(), ".codex", "auth.json");
12988
+ const authPath = (0, import_node_path35.join)((0, import_node_os14.homedir)(), ".codex", "auth.json");
12926
12989
  if (!(0, import_node_fs34.existsSync)(authPath)) return false;
12927
12990
  try {
12928
12991
  return (0, import_node_fs34.statSync)(authPath).size > 2;
@@ -12930,12 +12993,12 @@ function codexLooksAuthenticated() {
12930
12993
  return false;
12931
12994
  }
12932
12995
  }
12933
- var import_node_fs34, import_node_os13, import_node_path35, CODEX_PROMPT_ARG_MAX, FALLBACK_CODEX_MODELS, cachedCodexModels, CODEX_MODEL_CACHE_MS, codexAdapter;
12996
+ var import_node_fs34, import_node_os14, import_node_path35, CODEX_PROMPT_ARG_MAX, FALLBACK_CODEX_MODELS, cachedCodexModels, CODEX_MODEL_CACHE_MS, codexAdapter;
12934
12997
  var init_codex = __esm({
12935
12998
  "src/agents/codex.ts"() {
12936
12999
  "use strict";
12937
13000
  import_node_fs34 = require("fs");
12938
- import_node_os13 = require("os");
13001
+ import_node_os14 = require("os");
12939
13002
  import_node_path35 = require("path");
12940
13003
  init_run();
12941
13004
  init_app_settings();
@@ -14388,12 +14451,12 @@ var init_claude_usage = __esm({
14388
14451
  });
14389
14452
 
14390
14453
  // src/agents/claude-usage-client.ts
14391
- var import_node_fs40, import_node_os14, import_node_path40, CLAUDE_USAGE_ERROR_TTL_MS, CLAUDE_USAGE_STALE_OK_MS;
14454
+ var import_node_fs40, import_node_os15, import_node_path40, CLAUDE_USAGE_ERROR_TTL_MS, CLAUDE_USAGE_STALE_OK_MS;
14392
14455
  var init_claude_usage_client = __esm({
14393
14456
  "src/agents/claude-usage-client.ts"() {
14394
14457
  "use strict";
14395
14458
  import_node_fs40 = require("fs");
14396
- import_node_os14 = require("os");
14459
+ import_node_os15 = require("os");
14397
14460
  import_node_path40 = require("path");
14398
14461
  init_run();
14399
14462
  init_fetch();
@@ -21677,7 +21740,7 @@ function listConductorWorkspaces() {
21677
21740
  if (!(0, import_node_fs55.existsSync)(CONDUCTOR_DB)) {
21678
21741
  throw new Error(`Conductor DB not found at ${CONDUCTOR_DB}`);
21679
21742
  }
21680
- const tmp = (0, import_node_fs55.mkdtempSync)((0, import_node_path53.join)((0, import_node_os15.tmpdir)(), "sideboard-conductor-"));
21743
+ const tmp = (0, import_node_fs55.mkdtempSync)((0, import_node_path53.join)((0, import_node_os16.tmpdir)(), "sideboard-conductor-"));
21681
21744
  const snapshot = (0, import_node_path53.join)(tmp, "conductor.db");
21682
21745
  try {
21683
21746
  (0, import_node_fs55.copyFileSync)(CONDUCTOR_DB, snapshot);
@@ -21768,7 +21831,7 @@ function importConductorWorkspace(workspaceId) {
21768
21831
  if (!(0, import_node_fs55.existsSync)(CONDUCTOR_DB)) {
21769
21832
  throw new Error(`Conductor DB not found at ${CONDUCTOR_DB}`);
21770
21833
  }
21771
- const tmp = (0, import_node_fs55.mkdtempSync)((0, import_node_path53.join)((0, import_node_os15.tmpdir)(), "sideboard-conductor-"));
21834
+ const tmp = (0, import_node_fs55.mkdtempSync)((0, import_node_path53.join)((0, import_node_os16.tmpdir)(), "sideboard-conductor-"));
21772
21835
  const snapshot = (0, import_node_path53.join)(tmp, "conductor.db");
21773
21836
  try {
21774
21837
  (0, import_node_fs55.copyFileSync)(CONDUCTOR_DB, snapshot);
@@ -21863,13 +21926,13 @@ function importConductorWorkspace(workspaceId) {
21863
21926
  async function importConductorWorkspaceAsync(workspaceId) {
21864
21927
  return importConductorWorkspace(workspaceId);
21865
21928
  }
21866
- var import_node_child_process5, import_node_fs55, import_node_os15, import_node_path53, import_node_module6, CONDUCTOR_APP_SUPPORT, CONDUCTOR_DB, CURSOR_SDK_STORE;
21929
+ var import_node_child_process5, import_node_fs55, import_node_os16, import_node_path53, import_node_module6, CONDUCTOR_APP_SUPPORT, CONDUCTOR_DB, CURSOR_SDK_STORE;
21867
21930
  var init_adopt = __esm({
21868
21931
  "src/threads/adopt.ts"() {
21869
21932
  "use strict";
21870
21933
  import_node_child_process5 = require("child_process");
21871
21934
  import_node_fs55 = require("fs");
21872
- import_node_os15 = require("os");
21935
+ import_node_os16 = require("os");
21873
21936
  import_node_path53 = require("path");
21874
21937
  import_node_module6 = require("module");
21875
21938
  init_worktree();
@@ -23421,7 +23484,7 @@ function scanClaudePluginSkills(pluginsRoot, out) {
23421
23484
  walk(pluginsRoot, 0, false);
23422
23485
  }
23423
23486
  function discoverSkills(worktreePath) {
23424
- const home = (0, import_node_os16.homedir)();
23487
+ const home = (0, import_node_os17.homedir)();
23425
23488
  const collected = [];
23426
23489
  for (const rel of [".claude/skills", ".cursor/skills", ".sideboard/skills", ".brightsy/skills", "skills"]) {
23427
23490
  scanSkillsDir((0, import_node_path56.join)(worktreePath, rel), "workspace", collected);
@@ -23474,12 +23537,12 @@ function readSkillBody(skillPath, maxChars = 12e3) {
23474
23537
 
23475
23538
  \u2026(truncated)` : raw;
23476
23539
  }
23477
- var import_node_fs59, import_node_os16, import_node_path56, BUNDLED_SKILL_PREFIX;
23540
+ var import_node_fs59, import_node_os17, import_node_path56, BUNDLED_SKILL_PREFIX;
23478
23541
  var init_discover = __esm({
23479
23542
  "src/skills/discover.ts"() {
23480
23543
  "use strict";
23481
23544
  import_node_fs59 = require("fs");
23482
- import_node_os16 = require("os");
23545
+ import_node_os17 = require("os");
23483
23546
  import_node_path56 = require("path");
23484
23547
  init_long_running();
23485
23548
  BUNDLED_SKILL_PREFIX = "bundled:";
@@ -26002,10 +26065,10 @@ var init_orchestrator = __esm({
26002
26065
  }
26003
26066
  async removeWorkspace(repoPath) {
26004
26067
  removeWorkspace(repoPath);
26005
- for (const thread of listThreads()) {
26006
- if (!sameWorkspacePath(thread.repoPath, repoPath)) continue;
26007
- await this.archive(thread.id).catch(() => void 0);
26008
- }
26068
+ await archiveRemovedWorkspaceChats(
26069
+ listThreads().filter((thread) => archivesWithRemovedWorkspace(thread.repoPath, repoPath)),
26070
+ (id) => this.archive(id)
26071
+ );
26009
26072
  }
26010
26073
  async adopt(input) {
26011
26074
  const thread = await adoptThread(input);
@@ -18,9 +18,9 @@ import {
18
18
  searchAbleTimeTasks,
19
19
  toAbleTimeIssueInfo,
20
20
  updateAbleTimeTask
21
- } from "../chunk-BS3QLVPL.js";
22
- import "../chunk-I6HSGKMZ.js";
23
- import "../chunk-PY4UCMRI.js";
21
+ } from "../chunk-TMM4FEZ5.js";
22
+ import "../chunk-5T4YWFLD.js";
23
+ import "../chunk-VQEARG5H.js";
24
24
  import {
25
25
  AGENT_GIT_ACTIONS,
26
26
  BOARD_COLUMN_DEFS,
@@ -71,7 +71,7 @@ import {
71
71
  syncBoardPins,
72
72
  updateSchedule,
73
73
  workspaceTagTargetRef
74
- } from "../chunk-OEJQK7CY.js";
74
+ } from "../chunk-CBIUGGPI.js";
75
75
  import "../chunk-LX5R5JOR.js";
76
76
  import {
77
77
  PRESENT_PLAN_REQUIRES_PLAN_MODE,
@@ -90,12 +90,12 @@ import {
90
90
  sideboardMcpProfile,
91
91
  trustSystemCertificates,
92
92
  worktreeMcpToolNames
93
- } from "../chunk-BSN6DJ4L.js";
94
- import "../chunk-TQRSVE7D.js";
95
- import "../chunk-P2BSMNHB.js";
93
+ } from "../chunk-3H5U4QLD.js";
94
+ import "../chunk-7IAMHN2N.js";
95
+ import "../chunk-PXMLMBMI.js";
96
96
  import {
97
97
  httpFetch
98
- } from "../chunk-VKQGAWHY.js";
98
+ } from "../chunk-2GPQZZLY.js";
99
99
  import {
100
100
  mcpWaitForJobTimeoutMs,
101
101
  mcpWaitForTurnTimeoutMs,
@@ -106,7 +106,7 @@ import {
106
106
  waitForDetachedJob,
107
107
  waitForTurnToolResult,
108
108
  workspaceAgentChatSummaries
109
- } from "../chunk-LMWPVC5L.js";
109
+ } from "../chunk-ETZPTOK7.js";
110
110
  import {
111
111
  clipToolResultForStore,
112
112
  isInternalAgentStatusText,
@@ -115,7 +115,7 @@ import {
115
115
  import {
116
116
  GLOBAL_WORKSPACE_ID,
117
117
  isCloudCoordinatorThread
118
- } from "../chunk-2SJXQ4UX.js";
118
+ } from "../chunk-ULSY2BJF.js";
119
119
  import {
120
120
  canonicalizeRepoPath,
121
121
  formatGhLandError,
@@ -7,8 +7,8 @@ import {
7
7
  normalizeBrightsyEndpoint,
8
8
  refreshBrightsyAccessToken,
9
9
  registerBrightsyOAuthClient
10
- } from "./chunk-ROPGQRPU.js";
11
- import "./chunk-N7WZ6NIN.js";
10
+ } from "./chunk-33KDPEK4.js";
11
+ import "./chunk-JAT3JFOS.js";
12
12
  export {
13
13
  BRIGHTSY_OAUTH_CLIENT_ID,
14
14
  BRIGHTSY_OAUTH_REDIRECT,
@@ -9,8 +9,8 @@ import {
9
9
  normalizeBrightsyEndpoint,
10
10
  refreshBrightsyAccessToken,
11
11
  registerBrightsyOAuthClient
12
- } from "./chunk-P2BSMNHB.js";
13
- import "./chunk-VKQGAWHY.js";
12
+ } from "./chunk-PXMLMBMI.js";
13
+ import "./chunk-2GPQZZLY.js";
14
14
  export {
15
15
  BRIGHTSY_OAUTH_CLIENT_ID,
16
16
  BRIGHTSY_OAUTH_REDIRECT,
@@ -9,19 +9,19 @@ import {
9
9
  resolveSendFollowUp,
10
10
  startOrchestration,
11
11
  waitForPidExit
12
- } from "./chunk-WQ4M2L44.js";
13
- import "./chunk-COQLZNKQ.js";
14
- import "./chunk-GWFVCCJZ.js";
15
- import "./chunk-BMUVNTT4.js";
12
+ } from "./chunk-HJNFK5SP.js";
13
+ import "./chunk-PCNH74SF.js";
14
+ import "./chunk-VGNLMGBK.js";
15
+ import "./chunk-ABOH7GBG.js";
16
16
  import "./chunk-XSDCLM3F.js";
17
17
  import "./chunk-7H655NEW.js";
18
18
  import "./chunk-PGPSIEMW.js";
19
- import "./chunk-WY2IAB7J.js";
19
+ import "./chunk-MGJ7R7UX.js";
20
20
  import "./chunk-K5XSTHHP.js";
21
21
  import "./chunk-N5UGX3JL.js";
22
22
  import "./chunk-2P4XKWV2.js";
23
- import "./chunk-ROPGQRPU.js";
24
- import "./chunk-N7WZ6NIN.js";
23
+ import "./chunk-33KDPEK4.js";
24
+ import "./chunk-JAT3JFOS.js";
25
25
  import "./chunk-AXQ4ZWHK.js";
26
26
  import "./chunk-VOIWX5HA.js";
27
27
  import "./chunk-U6QDXT4K.js";
@@ -11,17 +11,17 @@ import {
11
11
  resolveSendFollowUp,
12
12
  startOrchestration,
13
13
  waitForPidExit
14
- } from "./chunk-OEJQK7CY.js";
14
+ } from "./chunk-CBIUGGPI.js";
15
15
  import "./chunk-LX5R5JOR.js";
16
16
  import "./chunk-4GK32AYX.js";
17
17
  import "./chunk-5DZUWGKV.js";
18
- import "./chunk-BSN6DJ4L.js";
19
- import "./chunk-TQRSVE7D.js";
20
- import "./chunk-P2BSMNHB.js";
21
- import "./chunk-VKQGAWHY.js";
22
- import "./chunk-LMWPVC5L.js";
18
+ import "./chunk-3H5U4QLD.js";
19
+ import "./chunk-7IAMHN2N.js";
20
+ import "./chunk-PXMLMBMI.js";
21
+ import "./chunk-2GPQZZLY.js";
22
+ import "./chunk-ETZPTOK7.js";
23
23
  import "./chunk-5QOLFOAX.js";
24
- import "./chunk-2SJXQ4UX.js";
24
+ import "./chunk-ULSY2BJF.js";
25
25
  import "./chunk-5MGLNVNK.js";
26
26
  import "./chunk-N2WW62LF.js";
27
27
  import "./chunk-DD67JWTN.js";
@@ -2,6 +2,8 @@
2
2
 
3
3
  import {
4
4
  addWorkspace,
5
+ archiveRemovedWorkspaceChats,
6
+ archivesWithRemovedWorkspace,
5
7
  ensureWorkspace,
6
8
  isRemovedWorkspace,
7
9
  listWorkspaces,
@@ -9,7 +11,7 @@ import {
9
11
  removeWorkspace,
10
12
  sameWorkspacePath,
11
13
  syncWorkspacesFromThreads
12
- } from "./chunk-2SJXQ4UX.js";
14
+ } from "./chunk-ULSY2BJF.js";
13
15
  import "./chunk-5MGLNVNK.js";
14
16
  import "./chunk-N2WW62LF.js";
15
17
  import "./chunk-DD67JWTN.js";
@@ -25,6 +27,8 @@ import "./chunk-KGZBYWZ3.js";
25
27
  import "./chunk-H5XL4KUS.js";
26
28
  export {
27
29
  addWorkspace,
30
+ archiveRemovedWorkspaceChats,
31
+ archivesWithRemovedWorkspace,
28
32
  ensureWorkspace,
29
33
  isRemovedWorkspace,
30
34
  listWorkspaces,
@@ -1,5 +1,7 @@
1
1
  import {
2
2
  addWorkspace,
3
+ archiveRemovedWorkspaceChats,
4
+ archivesWithRemovedWorkspace,
3
5
  ensureWorkspace,
4
6
  isRemovedWorkspace,
5
7
  listWorkspaces,
@@ -7,7 +9,7 @@ import {
7
9
  removeWorkspace,
8
10
  sameWorkspacePath,
9
11
  syncWorkspacesFromThreads
10
- } from "./chunk-WY2IAB7J.js";
12
+ } from "./chunk-MGJ7R7UX.js";
11
13
  import "./chunk-K5XSTHHP.js";
12
14
  import "./chunk-N5UGX3JL.js";
13
15
  import "./chunk-2P4XKWV2.js";
@@ -23,6 +25,8 @@ import "./chunk-JT7R45JB.js";
23
25
  import "./chunk-EHT2DRT4.js";
24
26
  export {
25
27
  addWorkspace,
28
+ archiveRemovedWorkspaceChats,
29
+ archivesWithRemovedWorkspace,
26
30
  ensureWorkspace,
27
31
  isRemovedWorkspace,
28
32
  listWorkspaces,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideboard-ai/core",
3
- "version": "0.1.284",
3
+ "version": "0.1.286",
4
4
  "description": "Sideboard core — orchestration, agents, git worktrees, MCP server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -1,41 +0,0 @@
1
- // src/http/fetch.ts
2
- var injected = null;
3
- function setHttpFetchImpl(fetchImpl) {
4
- injected = fetchImpl;
5
- }
6
- var TLS_ISSUER_RE = /UNABLE_TO_GET_ISSUER_CERT|UNABLE_TO_VERIFY_LEAF_SIGNATURE|SELF_SIGNED_CERT_IN_CHAIN/i;
7
- var TLS_ISSUER_HINT = " \u2014 Node rejected the TLS certificate (corporate VPN/proxy CA). Desktop Linear can still work; reconnecting the API key will not fix this.";
8
- function tlsIssuerHint(code, message) {
9
- const text = `${code ?? ""} ${message}`;
10
- return TLS_ISSUER_RE.test(text) ? TLS_ISSUER_HINT : "";
11
- }
12
- function formatFetchError(err, url) {
13
- if (!(err instanceof Error)) return `${String(err)} (${url})`;
14
- const cause = err.cause;
15
- let detail = "";
16
- let hint = tlsIssuerHint(void 0, err.message);
17
- if (cause instanceof Error) {
18
- const code = typeof cause.code === "string" ? cause.code : void 0;
19
- detail = code ? ` [${code}: ${cause.message}]` : ` [${cause.message}]`;
20
- hint = tlsIssuerHint(code, `${err.message} ${cause.message}`) || hint;
21
- } else if (cause != null) {
22
- detail = ` [${String(cause)}]`;
23
- hint = tlsIssuerHint(void 0, String(cause)) || hint;
24
- }
25
- return `${err.message}${detail} (${url})${hint}`;
26
- }
27
- async function httpFetch(input, init) {
28
- const url = typeof input === "string" ? input : input.href;
29
- const fn = injected ?? globalThis.fetch.bind(globalThis);
30
- try {
31
- return await fn(url, init);
32
- } catch (err) {
33
- throw new Error(formatFetchError(err, url));
34
- }
35
- }
36
-
37
- export {
38
- setHttpFetchImpl,
39
- formatFetchError,
40
- httpFetch
41
- };