@sideboard-ai/core 0.1.328 → 0.1.330

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 (67) hide show
  1. package/dist/{abletime-OW7LTFQD.js → abletime-5FBKBO3R.js} +4 -4
  2. package/dist/{abletime-NW4PJGHN.js → abletime-SO2YHMEI.js} +4 -4
  3. package/dist/{abletime-oauth-TPR2QDRI.js → abletime-oauth-EUC5FFMD.js} +5 -5
  4. package/dist/{abletime-oauth-KWQQRHOQ.js → abletime-oauth-I34WZZZL.js} +3 -3
  5. package/dist/{abletime-rest-5DCWN3P4.js → abletime-rest-EI5ZJ72Z.js} +3 -3
  6. package/dist/{abletime-rest-UJ6SXDBN.js → abletime-rest-HEQXSZAQ.js} +3 -3
  7. package/dist/{agents-XWIPONJR.js → agents-JH4WV2ZH.js} +7 -7
  8. package/dist/{agents-IYBY3JT5.js → agents-JXQKHY7Q.js} +7 -7
  9. package/dist/{app-settings-A5D364JD.js → app-settings-JAEV53LB.js} +1 -1
  10. package/dist/{app-settings-SA4HX3ZQ.js → app-settings-SHZWNJBV.js} +1 -1
  11. package/dist/{chunk-TUH4ICHQ.js → chunk-277I5IBI.js} +1 -1
  12. package/dist/{chunk-QMLDR63X.js → chunk-3DJQLQWU.js} +2 -2
  13. package/dist/{chunk-EJRCHCXM.js → chunk-7BAS6DF7.js} +2 -1
  14. package/dist/{chunk-ECY7WL6T.js → chunk-7L36GZA4.js} +2 -2
  15. package/dist/{chunk-SFXGD5KJ.js → chunk-7MPRTC6X.js} +1 -1
  16. package/dist/{chunk-ZPBOWO64.js → chunk-BAIPCN34.js} +2 -2
  17. package/dist/{chunk-SB5ADEZZ.js → chunk-D6V6F74A.js} +5 -5
  18. package/dist/{chunk-MO46K6WK.js → chunk-DBRQ5NNB.js} +8 -8
  19. package/dist/{chunk-NQGLDQYB.js → chunk-DFKLWWLY.js} +7 -7
  20. package/dist/{chunk-XOMVOBPU.js → chunk-E6LONPQH.js} +20 -20
  21. package/dist/{chunk-5Y2C7Q55.js → chunk-EW5D53VB.js} +1 -1
  22. package/dist/{chunk-D446IWPP.js → chunk-EY5BJAPV.js} +2 -1
  23. package/dist/{chunk-XBBZZHJY.js → chunk-F4OUZDIB.js} +5 -5
  24. package/dist/{chunk-Q4UPRQOS.js → chunk-G45SGI57.js} +3 -3
  25. package/dist/{chunk-WD222BVP.js → chunk-HCK3UCBJ.js} +21 -21
  26. package/dist/{chunk-EUIVQAPK.js → chunk-HJIA4X3L.js} +2 -2
  27. package/dist/{chunk-4F7THWIO.js → chunk-JQWCZGSO.js} +2 -2
  28. package/dist/{chunk-X3XTO45Y.js → chunk-KUD24QYI.js} +5 -5
  29. package/dist/{chunk-4G3W23X3.js → chunk-MXQ66CLO.js} +3 -3
  30. package/dist/{chunk-UMXBH344.js → chunk-NCFYUUSC.js} +1 -1
  31. package/dist/{chunk-2GEUFPQQ.js → chunk-NQHTYX35.js} +1 -1
  32. package/dist/{chunk-RDXODLEN.js → chunk-O7JSWISN.js} +3 -3
  33. package/dist/{chunk-R2C45NHT.js → chunk-P4QRDXRY.js} +2 -2
  34. package/dist/{chunk-EYDLXVED.js → chunk-PZ5MVD27.js} +5 -5
  35. package/dist/{chunk-Y6OHM672.js → chunk-QVLDZWHZ.js} +1 -1
  36. package/dist/{chunk-DACWFN4O.js → chunk-SKPX66MO.js} +5 -5
  37. package/dist/{chunk-JKHCADKB.js → chunk-U7EANR52.js} +2 -2
  38. package/dist/{chunk-KLVW3J2B.js → chunk-XOIJJRAQ.js} +2 -2
  39. package/dist/{chunk-CHYUUETG.js → chunk-YMV5O7KY.js} +3 -3
  40. package/dist/{chunk-ATQLP22S.js → chunk-ZT5YPYZE.js} +1 -1
  41. package/dist/{conductor-U5LGJZUJ.js → conductor-6DIR7A4N.js} +5 -5
  42. package/dist/{conductor-G6GH5ZMU.js → conductor-FA27ZGCV.js} +5 -5
  43. package/dist/{coordinator-prompt-J7O7JB26.js → coordinator-prompt-B6RHGEJK.js} +4 -4
  44. package/dist/{coordinator-prompt-3PJLU3UH.js → coordinator-prompt-KAZXK5FZ.js} +4 -4
  45. package/dist/{global-workspace-Y3UDZYJX.js → global-workspace-IOKHZCXD.js} +4 -4
  46. package/dist/{global-workspace-4CTLU2BV.js → global-workspace-JKINHUY3.js} +4 -4
  47. package/dist/index.cjs +9 -6
  48. package/dist/index.d.cts +12 -9
  49. package/dist/index.d.ts +12 -9
  50. package/dist/index.js +26 -24
  51. package/dist/{linear-CXWGH2TW.js → linear-7HSIGV5S.js} +2 -2
  52. package/dist/{linear-WLDCJ3AF.js → linear-FRJRK6KI.js} +2 -2
  53. package/dist/{linear-list-52LEDEWO.js → linear-list-I6DNJC6V.js} +1 -1
  54. package/dist/{linear-list-FGVN65JU.js → linear-list-LDMBSKYI.js} +1 -1
  55. package/dist/mcp/run-stdio.cjs +4 -3
  56. package/dist/mcp/run-stdio.js +16 -16
  57. package/dist/{optional-cli-INRVBBBG.js → optional-cli-FOSC4NVE.js} +3 -3
  58. package/dist/{optional-cli-FN4MGB6W.js → optional-cli-NSQZ2DYK.js} +4 -4
  59. package/dist/{orchestrator-YY2JUYKD.js → orchestrator-LI6EBD2Y.js} +10 -10
  60. package/dist/{orchestrator-3F53AZEN.js → orchestrator-V35TLMXB.js} +10 -10
  61. package/dist/{thread-store-K2ZNGUSM.js → thread-store-NVFWKJFH.js} +2 -2
  62. package/dist/{thread-store-4WE24XA2.js → thread-store-PCIMS6RA.js} +2 -2
  63. package/dist/{workspaces-MM7CQYR6.js → workspaces-FJL3TL3K.js} +4 -4
  64. package/dist/{workspaces-WYCVZ6XH.js → workspaces-OLONQF2C.js} +4 -4
  65. package/dist/{worktree-JBNEMJ5Z.js → worktree-QSQJ2POO.js} +3 -3
  66. package/dist/{worktree-NNVRGPP4.js → worktree-TX4WXQZV.js} +3 -3
  67. package/package.json +1 -1
@@ -9,14 +9,14 @@ import {
9
9
  enrichWorkspacesWithGithub,
10
10
  ensureGlobalCoordinatorCwd,
11
11
  formatWorkspaceInventory
12
- } from "./chunk-Q4UPRQOS.js";
13
- import "./chunk-JKHCADKB.js";
12
+ } from "./chunk-G45SGI57.js";
13
+ import "./chunk-U7EANR52.js";
14
14
  import "./chunk-N2WW62LF.js";
15
15
  import "./chunk-4YXZOXMT.js";
16
16
  import "./chunk-YBTSZ2SW.js";
17
- import "./chunk-5Y2C7Q55.js";
17
+ import "./chunk-EW5D53VB.js";
18
18
  import "./chunk-WMZIANPV.js";
19
- import "./chunk-EJRCHCXM.js";
19
+ import "./chunk-7BAS6DF7.js";
20
20
  import "./chunk-NSTQ6QKD.js";
21
21
  import "./chunk-WWUABK6B.js";
22
22
  import "./chunk-FJZWM2ON.js";
@@ -7,15 +7,15 @@ import {
7
7
  enrichWorkspacesWithGithub,
8
8
  ensureGlobalCoordinatorCwd,
9
9
  formatWorkspaceInventory
10
- } from "./chunk-RDXODLEN.js";
11
- import "./chunk-R2C45NHT.js";
12
- import "./chunk-Y6OHM672.js";
10
+ } from "./chunk-O7JSWISN.js";
11
+ import "./chunk-P4QRDXRY.js";
12
+ import "./chunk-QVLDZWHZ.js";
13
13
  import "./chunk-QKHEVSB5.js";
14
14
  import "./chunk-N6ZF3XRP.js";
15
15
  import "./chunk-6K64FJDD.js";
16
16
  import "./chunk-LG6RJBIY.js";
17
17
  import "./chunk-2TUE6JKQ.js";
18
- import "./chunk-D446IWPP.js";
18
+ import "./chunk-EY5BJAPV.js";
19
19
  import "./chunk-4TR3HZFT.js";
20
20
  import "./chunk-WDRMZKVB.js";
21
21
  import "./chunk-KI45T4DI.js";
@@ -20,14 +20,14 @@ import {
20
20
  remoteCoordinatorSourceRef,
21
21
  slackCoordinatorSourceRef,
22
22
  takenTeamSlugsForOrchestration
23
- } from "./chunk-Q4UPRQOS.js";
24
- import "./chunk-JKHCADKB.js";
23
+ } from "./chunk-G45SGI57.js";
24
+ import "./chunk-U7EANR52.js";
25
25
  import "./chunk-N2WW62LF.js";
26
26
  import "./chunk-4YXZOXMT.js";
27
27
  import "./chunk-YBTSZ2SW.js";
28
- import "./chunk-5Y2C7Q55.js";
28
+ import "./chunk-EW5D53VB.js";
29
29
  import "./chunk-WMZIANPV.js";
30
- import "./chunk-EJRCHCXM.js";
30
+ import "./chunk-7BAS6DF7.js";
31
31
  import "./chunk-NSTQ6QKD.js";
32
32
  import "./chunk-WWUABK6B.js";
33
33
  import "./chunk-FJZWM2ON.js";
@@ -18,15 +18,15 @@ import {
18
18
  remoteCoordinatorSourceRef,
19
19
  slackCoordinatorSourceRef,
20
20
  takenTeamSlugsForOrchestration
21
- } from "./chunk-RDXODLEN.js";
22
- import "./chunk-R2C45NHT.js";
23
- import "./chunk-Y6OHM672.js";
21
+ } from "./chunk-O7JSWISN.js";
22
+ import "./chunk-P4QRDXRY.js";
23
+ import "./chunk-QVLDZWHZ.js";
24
24
  import "./chunk-QKHEVSB5.js";
25
25
  import "./chunk-N6ZF3XRP.js";
26
26
  import "./chunk-6K64FJDD.js";
27
27
  import "./chunk-LG6RJBIY.js";
28
28
  import "./chunk-2TUE6JKQ.js";
29
- import "./chunk-D446IWPP.js";
29
+ import "./chunk-EY5BJAPV.js";
30
30
  import "./chunk-4TR3HZFT.js";
31
31
  import "./chunk-WDRMZKVB.js";
32
32
  import "./chunk-KI45T4DI.js";
package/dist/index.cjs CHANGED
@@ -1232,6 +1232,7 @@ function normalizeRemoteRelayUrl(raw) {
1232
1232
  url.pathname = REMOTE_RELAY_PATH;
1233
1233
  url.search = "";
1234
1234
  url.hash = "";
1235
+ if (url.hostname === "relay.sideboard.cloud") url.hostname = "relay.sideboard.build";
1235
1236
  return url.toString();
1236
1237
  }
1237
1238
  function remoteRelayUrl(configured) {
@@ -1435,7 +1436,7 @@ var init_protocol = __esm({
1435
1436
  REMOTE_RELAY_PATH = "/remote";
1436
1437
  REMOTE_PING_INTERVAL_MS = 2e4;
1437
1438
  REMOTE_PONG_TIMEOUT_MS = 15e3;
1438
- BAKED_REMOTE_RELAY_URL = `wss://relay.sideboard.cloud${REMOTE_RELAY_PATH}`;
1439
+ BAKED_REMOTE_RELAY_URL = `wss://relay.sideboard.build${REMOTE_RELAY_PATH}`;
1439
1440
  }
1440
1441
  });
1441
1442
 
@@ -26500,9 +26501,9 @@ var init_abletime_oauth = __esm({
26500
26501
  ABLETIME_OAUTH_CALLBACK_PATH = "/oauth/abletime/callback";
26501
26502
  ABLETIME_OAUTH_PORT = 19849;
26502
26503
  ABLETIME_OAUTH_LOCAL_CALLBACK = `http://127.0.0.1:${ABLETIME_OAUTH_PORT}/callback`;
26503
- ABLETIME_OAUTH_REDIRECT = `https://www.sideboard.cloud${ABLETIME_OAUTH_CALLBACK_PATH}`;
26504
+ ABLETIME_OAUTH_REDIRECT = `https://www.sideboard.build${ABLETIME_OAUTH_CALLBACK_PATH}`;
26504
26505
  BOUNCE_QUERY_KEYS = ["code", "state", "error", "error_description"];
26505
- BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.cloud/oauth/abletime-client.json";
26506
+ BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.build/oauth/abletime-client.json";
26506
26507
  ABLETIME_OAUTH_RESOURCE = `${DEFAULT_ABLETIME_HOST}/api/public/v2/mcp`;
26507
26508
  REFRESH_SKEW_MS3 = 5 * 6e4;
26508
26509
  refreshInFlight3 = null;
@@ -40934,7 +40935,7 @@ var SLACK_OAUTH_RESULT_PATH = "/slack/oauth/result";
40934
40935
  var SLACK_RELAY_DESKTOP_PATH = "/slack/desktop";
40935
40936
  var SLACK_OAUTH_LOCAL_PORT = 19847;
40936
40937
  var SLACK_OAUTH_LOCAL_CALLBACK = `http://127.0.0.1:${SLACK_OAUTH_LOCAL_PORT}${SLACK_OAUTH_CALLBACK_PATH}`;
40937
- var SLACK_OAUTH_REDIRECT = `https://relay.sideboard.cloud${SLACK_OAUTH_CALLBACK_PATH}`;
40938
+ var SLACK_OAUTH_REDIRECT = `https://relay.sideboard.build${SLACK_OAUTH_CALLBACK_PATH}`;
40938
40939
  function slackOAuthRedirectUri() {
40939
40940
  return process.env.SIDEBOARD_SLACK_OAUTH_REDIRECT?.trim() || SLACK_OAUTH_REDIRECT;
40940
40941
  }
@@ -40969,7 +40970,7 @@ function parseSlackOAuthResultUrl(reqUrl) {
40969
40970
 
40970
40971
  // src/slack/baked-app.ts
40971
40972
  var BAKED_SLACK_CLIENT_ID = "7592788819232.11813536272562";
40972
- var BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.cloud/slack/desktop";
40973
+ var BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.build/slack/desktop";
40973
40974
  function hasBakedSlackOAuth() {
40974
40975
  return Boolean(BAKED_SLACK_CLIENT_ID.trim());
40975
40976
  }
@@ -43197,7 +43198,9 @@ async function startRelayServer(opts) {
43197
43198
  }
43198
43199
  const hostname2 = requestHostname(req);
43199
43200
  const canonical = (opts.canonicalSiteHost ?? "www.sideboard.cloud").toLowerCase();
43200
- if (opts.redirectHosts?.includes(hostname2) && hostname2 !== canonical) {
43201
+ const staticHosts = opts.staticHosts ?? [];
43202
+ const servesSite = staticHosts.length > 0 && staticHosts.includes(hostname2);
43203
+ if (opts.redirectHosts?.includes(hostname2) && hostname2 !== canonical && !servesSite) {
43201
43204
  res.writeHead(301, { Location: `https://${canonical}${reqUrl}` });
43202
43205
  res.end();
43203
43206
  return;
package/dist/index.d.cts CHANGED
@@ -3523,7 +3523,7 @@ declare const ABLETIME_OAUTH_PORT = 19849;
3523
3523
  /** Local listener the marketing-site bounce sends the browser to. */
3524
3524
  declare const ABLETIME_OAUTH_LOCAL_CALLBACK = "http://127.0.0.1:19849/callback";
3525
3525
  /** Registered redirect — must match `site/oauth/abletime-client.json` redirect_uris. */
3526
- declare const ABLETIME_OAUTH_REDIRECT = "https://www.sideboard.cloud/oauth/abletime/callback";
3526
+ declare const ABLETIME_OAUTH_REDIRECT = "https://www.sideboard.build/oauth/abletime/callback";
3527
3527
  declare function ableTimeOAuthRedirectUri(): string;
3528
3528
  declare function parseAbleTimeOAuthCallbackUrl(reqUrl: string): URL | null;
3529
3529
  /** Map the hosted callback onto the desktop listener (query: code / state / error). */
@@ -3531,7 +3531,7 @@ declare function ableTimeOAuthLocalBounceUrl(reqUrl: string): string | null;
3531
3531
  /** Marketing-site page that immediately opens the desktop listener. */
3532
3532
  declare function ableTimeOAuthBouncePage(localUrl: string): string;
3533
3533
  /** Client ID Metadata Document (AbleTime advertises CIMD, not DCR). */
3534
- declare const BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.cloud/oauth/abletime-client.json";
3534
+ declare const BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.build/oauth/abletime-client.json";
3535
3535
  declare const ABLETIME_OAUTH_RESOURCE = "https://track.abletime.com/api/public/v2/mcp";
3536
3536
  declare function hasBakedAbleTimeOAuth(): boolean;
3537
3537
  declare function ableTimeOAuthClientId(): string;
@@ -8340,7 +8340,7 @@ declare function closeMcpUiHost(): void;
8340
8340
  declare function stashMcpAppModelContext(threadId: string, text: string): void;
8341
8341
 
8342
8342
  /** Public WebSocket URL for Slack desktops on the hosted relay (path included). */
8343
- declare const BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.cloud/slack/desktop";
8343
+ declare const BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.build/slack/desktop";
8344
8344
  declare function hasBakedSlackOAuth(): boolean;
8345
8345
  /**
8346
8346
  * WebSocket URL for this Mac's Slack desktop session on the relay.
@@ -8348,7 +8348,7 @@ declare function hasBakedSlackOAuth(): boolean;
8348
8348
  */
8349
8349
  declare function slackRelayUrl(): string;
8350
8350
 
8351
- declare const SLACK_OAUTH_REDIRECT = "https://relay.sideboard.cloud/slack/callback";
8351
+ declare const SLACK_OAUTH_REDIRECT = "https://relay.sideboard.build/slack/callback";
8352
8352
 
8353
8353
  declare function slackOAuthResultUrl(state: string, relayWsUrl?: string): string;
8354
8354
 
@@ -8612,7 +8612,7 @@ declare function runRemoteHost(opts: RemoteHostClientOptions): RemoteHostHandle;
8612
8612
 
8613
8613
  /** Phone ↔ relay ↔ Mac. Message text only. The Mac runs the orchestrator. */
8614
8614
  declare const REMOTE_RELAY_PATH = "/remote";
8615
- declare const BAKED_REMOTE_RELAY_URL = "wss://relay.sideboard.cloud/remote";
8615
+ declare const BAKED_REMOTE_RELAY_URL = "wss://relay.sideboard.build/remote";
8616
8616
  /**
8617
8617
  * `wss://host/remote`, or `ws://` for a local relay.
8618
8618
  * `https://host` and a host with no path become that WebSocket URL.
@@ -8718,7 +8718,7 @@ declare function handleRemoteInbound(text: string, opts: {
8718
8718
  }): void;
8719
8719
 
8720
8720
  declare function isRemoteAccountLoginCancelled(err: unknown): boolean;
8721
- /** `wss://relay.sideboard.cloud/remote` → `https://relay.sideboard.cloud`. */
8721
+ /** `wss://relay.sideboard.build/remote` → `https://relay.sideboard.build`. */
8722
8722
  declare function remoteAccountHttpOrigin(wsUrl?: string): string;
8723
8723
  type RemoteAccountSession = {
8724
8724
  credential: string;
@@ -8881,7 +8881,10 @@ interface RelayServerOptions {
8881
8881
  staticRoot?: string;
8882
8882
  /** Hostnames that get the marketing site (e.g. `www.sideboard.cloud`). Empty = any host. */
8883
8883
  staticHosts?: string[];
8884
- /** Apex (or aliases) that 301 to `canonicalSiteHost`. */
8884
+ /**
8885
+ * Apex (or aliases) that 301 to `canonicalSiteHost`.
8886
+ * A host listed in `staticHosts` is served instead, so both names can stay up.
8887
+ */
8885
8888
  redirectHosts?: string[];
8886
8889
  /** Canonical public site host (default `www.sideboard.cloud`). */
8887
8890
  canonicalSiteHost?: string;
@@ -8892,7 +8895,7 @@ interface RelayServerOptions {
8892
8895
  accountsPath?: string;
8893
8896
  /** Git-host OAuth clients. Secrets stay on the relay. */
8894
8897
  relayOAuth?: RelayOAuthConfig;
8895
- /** Public origin for OAuth redirects, e.g. `https://relay.sideboard.cloud`. */
8898
+ /** Public origin for OAuth redirects, e.g. `https://relay.sideboard.build`. */
8896
8899
  relayPublicOrigin?: string;
8897
8900
  }
8898
8901
  interface RelayServerHandle {
@@ -8917,7 +8920,7 @@ interface SlackRelayRegisterWorkspace {
8917
8920
  userToken: string;
8918
8921
  }
8919
8922
  interface SlackRelayClientOptions {
8920
- /** Full WebSocket URL including path, e.g. wss://relay.sideboard.cloud/slack/desktop */
8923
+ /** Full WebSocket URL including path, e.g. wss://relay.sideboard.build/slack/desktop */
8921
8924
  url: string;
8922
8925
  workspaces: SlackRelayRegisterWorkspace[];
8923
8926
  /** Stable per-Mac destination id. */
package/dist/index.d.ts CHANGED
@@ -3523,7 +3523,7 @@ declare const ABLETIME_OAUTH_PORT = 19849;
3523
3523
  /** Local listener the marketing-site bounce sends the browser to. */
3524
3524
  declare const ABLETIME_OAUTH_LOCAL_CALLBACK = "http://127.0.0.1:19849/callback";
3525
3525
  /** Registered redirect — must match `site/oauth/abletime-client.json` redirect_uris. */
3526
- declare const ABLETIME_OAUTH_REDIRECT = "https://www.sideboard.cloud/oauth/abletime/callback";
3526
+ declare const ABLETIME_OAUTH_REDIRECT = "https://www.sideboard.build/oauth/abletime/callback";
3527
3527
  declare function ableTimeOAuthRedirectUri(): string;
3528
3528
  declare function parseAbleTimeOAuthCallbackUrl(reqUrl: string): URL | null;
3529
3529
  /** Map the hosted callback onto the desktop listener (query: code / state / error). */
@@ -3531,7 +3531,7 @@ declare function ableTimeOAuthLocalBounceUrl(reqUrl: string): string | null;
3531
3531
  /** Marketing-site page that immediately opens the desktop listener. */
3532
3532
  declare function ableTimeOAuthBouncePage(localUrl: string): string;
3533
3533
  /** Client ID Metadata Document (AbleTime advertises CIMD, not DCR). */
3534
- declare const BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.cloud/oauth/abletime-client.json";
3534
+ declare const BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.build/oauth/abletime-client.json";
3535
3535
  declare const ABLETIME_OAUTH_RESOURCE = "https://track.abletime.com/api/public/v2/mcp";
3536
3536
  declare function hasBakedAbleTimeOAuth(): boolean;
3537
3537
  declare function ableTimeOAuthClientId(): string;
@@ -8340,7 +8340,7 @@ declare function closeMcpUiHost(): void;
8340
8340
  declare function stashMcpAppModelContext(threadId: string, text: string): void;
8341
8341
 
8342
8342
  /** Public WebSocket URL for Slack desktops on the hosted relay (path included). */
8343
- declare const BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.cloud/slack/desktop";
8343
+ declare const BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.build/slack/desktop";
8344
8344
  declare function hasBakedSlackOAuth(): boolean;
8345
8345
  /**
8346
8346
  * WebSocket URL for this Mac's Slack desktop session on the relay.
@@ -8348,7 +8348,7 @@ declare function hasBakedSlackOAuth(): boolean;
8348
8348
  */
8349
8349
  declare function slackRelayUrl(): string;
8350
8350
 
8351
- declare const SLACK_OAUTH_REDIRECT = "https://relay.sideboard.cloud/slack/callback";
8351
+ declare const SLACK_OAUTH_REDIRECT = "https://relay.sideboard.build/slack/callback";
8352
8352
 
8353
8353
  declare function slackOAuthResultUrl(state: string, relayWsUrl?: string): string;
8354
8354
 
@@ -8612,7 +8612,7 @@ declare function runRemoteHost(opts: RemoteHostClientOptions): RemoteHostHandle;
8612
8612
 
8613
8613
  /** Phone ↔ relay ↔ Mac. Message text only. The Mac runs the orchestrator. */
8614
8614
  declare const REMOTE_RELAY_PATH = "/remote";
8615
- declare const BAKED_REMOTE_RELAY_URL = "wss://relay.sideboard.cloud/remote";
8615
+ declare const BAKED_REMOTE_RELAY_URL = "wss://relay.sideboard.build/remote";
8616
8616
  /**
8617
8617
  * `wss://host/remote`, or `ws://` for a local relay.
8618
8618
  * `https://host` and a host with no path become that WebSocket URL.
@@ -8718,7 +8718,7 @@ declare function handleRemoteInbound(text: string, opts: {
8718
8718
  }): void;
8719
8719
 
8720
8720
  declare function isRemoteAccountLoginCancelled(err: unknown): boolean;
8721
- /** `wss://relay.sideboard.cloud/remote` → `https://relay.sideboard.cloud`. */
8721
+ /** `wss://relay.sideboard.build/remote` → `https://relay.sideboard.build`. */
8722
8722
  declare function remoteAccountHttpOrigin(wsUrl?: string): string;
8723
8723
  type RemoteAccountSession = {
8724
8724
  credential: string;
@@ -8881,7 +8881,10 @@ interface RelayServerOptions {
8881
8881
  staticRoot?: string;
8882
8882
  /** Hostnames that get the marketing site (e.g. `www.sideboard.cloud`). Empty = any host. */
8883
8883
  staticHosts?: string[];
8884
- /** Apex (or aliases) that 301 to `canonicalSiteHost`. */
8884
+ /**
8885
+ * Apex (or aliases) that 301 to `canonicalSiteHost`.
8886
+ * A host listed in `staticHosts` is served instead, so both names can stay up.
8887
+ */
8885
8888
  redirectHosts?: string[];
8886
8889
  /** Canonical public site host (default `www.sideboard.cloud`). */
8887
8890
  canonicalSiteHost?: string;
@@ -8892,7 +8895,7 @@ interface RelayServerOptions {
8892
8895
  accountsPath?: string;
8893
8896
  /** Git-host OAuth clients. Secrets stay on the relay. */
8894
8897
  relayOAuth?: RelayOAuthConfig;
8895
- /** Public origin for OAuth redirects, e.g. `https://relay.sideboard.cloud`. */
8898
+ /** Public origin for OAuth redirects, e.g. `https://relay.sideboard.build`. */
8896
8899
  relayPublicOrigin?: string;
8897
8900
  }
8898
8901
  interface RelayServerHandle {
@@ -8917,7 +8920,7 @@ interface SlackRelayRegisterWorkspace {
8917
8920
  userToken: string;
8918
8921
  }
8919
8922
  interface SlackRelayClientOptions {
8920
- /** Full WebSocket URL including path, e.g. wss://relay.sideboard.cloud/slack/desktop */
8923
+ /** Full WebSocket URL including path, e.g. wss://relay.sideboard.build/slack/desktop */
8921
8924
  url: string;
8922
8925
  workspaces: SlackRelayRegisterWorkspace[];
8923
8926
  /** Stable per-Mac destination id. */
package/dist/index.js CHANGED
@@ -17,13 +17,13 @@ import {
17
17
  toAbleTimeIssueInfo,
18
18
  updateAbleTimeTask,
19
19
  verifyAbleTimeConnection
20
- } from "./chunk-CHYUUETG.js";
20
+ } from "./chunk-YMV5O7KY.js";
21
21
  import {
22
22
  clearOptionalCliPresenceCache,
23
23
  detectOptionalServiceClis,
24
24
  installOptionalServiceCli,
25
25
  optionalCliPresence
26
- } from "./chunk-QMLDR63X.js";
26
+ } from "./chunk-3DJQLQWU.js";
27
27
  import {
28
28
  AGENT_GIT_ACTIONS,
29
29
  BOARD_COLUMN_DEFS,
@@ -218,7 +218,7 @@ import {
218
218
  worktreeCleanupSettings,
219
219
  writeAgentBlock,
220
220
  writeWorktreeFile
221
- } from "./chunk-WD222BVP.js";
221
+ } from "./chunk-HCK3UCBJ.js";
222
222
  import {
223
223
  OPTIONAL_SERVICES,
224
224
  OPTIONAL_SERVICE_IDS,
@@ -234,7 +234,7 @@ import {
234
234
  optionalServiceConnected,
235
235
  optionalServiceSpec,
236
236
  verifyOptionalService
237
- } from "./chunk-ECY7WL6T.js";
237
+ } from "./chunk-7L36GZA4.js";
238
238
  import {
239
239
  LEGACY_PLAN_FILE_REL,
240
240
  PLAN_FILE_NAME,
@@ -291,7 +291,7 @@ import {
291
291
  startLinearOAuth,
292
292
  updateLinearIssue,
293
293
  validateLinearApiKey
294
- } from "./chunk-SFXGD5KJ.js";
294
+ } from "./chunk-7MPRTC6X.js";
295
295
  import {
296
296
  downloadAuthenticatedFile,
297
297
  extractHttpUrls,
@@ -379,7 +379,7 @@ import {
379
379
  userMcpNamesToDisable,
380
380
  worktreeMcpToolNames,
381
381
  writeInjectedMcpConfig
382
- } from "./chunk-NQGLDQYB.js";
382
+ } from "./chunk-DFKLWWLY.js";
383
383
  import {
384
384
  getAgentSetupInfo,
385
385
  installAgent,
@@ -391,7 +391,7 @@ import {
391
391
  prepareTerminalCommand,
392
392
  resolveLoginCommand,
393
393
  whichOnPath
394
- } from "./chunk-KLVW3J2B.js";
394
+ } from "./chunk-XOIJJRAQ.js";
395
395
  import {
396
396
  brightsyMcpServerName,
397
397
  connectBrightsyTeam,
@@ -402,7 +402,7 @@ import {
402
402
  listConnectedBrightsyTeams,
403
403
  switchBrightsyAccount
404
404
  } from "./chunk-S5CJUIPY.js";
405
- import "./chunk-ATQLP22S.js";
405
+ import "./chunk-ZT5YPYZE.js";
406
406
  import {
407
407
  BRIGHTSY_SUMMARIZE_CONTEXT_TOOL,
408
408
  CHARS_PER_CONTEXT_TOKEN,
@@ -512,7 +512,7 @@ import {
512
512
  workspaceAgentChatSummaries,
513
513
  worktreeRunPortsPath,
514
514
  wrapReviewSkillMarkdown
515
- } from "./chunk-X3XTO45Y.js";
515
+ } from "./chunk-KUD24QYI.js";
516
516
  import {
517
517
  STDERR_EVENT_MAX_CHARS,
518
518
  STDOUT_EVENT_MAX_CHARS,
@@ -578,10 +578,10 @@ import {
578
578
  parseAbleTimeOAuthCallbackUrl,
579
579
  resolveAbleTimeOAuthHost,
580
580
  startAbleTimeOAuth
581
- } from "./chunk-XBBZZHJY.js";
581
+ } from "./chunk-F4OUZDIB.js";
582
582
  import {
583
583
  looksLikeAbleTimeUlid
584
- } from "./chunk-EUIVQAPK.js";
584
+ } from "./chunk-HJIA4X3L.js";
585
585
  import {
586
586
  ABLETIME_MCP_PATH,
587
587
  ABLETIME_MCP_PM_PATH,
@@ -602,7 +602,7 @@ import {
602
602
  normalizeAbleTimeCredential,
603
603
  normalizeAbleTimeHost,
604
604
  rewriteAbleTimeError
605
- } from "./chunk-DACWFN4O.js";
605
+ } from "./chunk-SKPX66MO.js";
606
606
  import {
607
607
  CLOUD_COORDINATOR_BUSY_REPLY,
608
608
  CLOUD_COORDINATOR_CANCELED_REPLY,
@@ -655,7 +655,7 @@ import {
655
655
  stageBuffersAsAttachments,
656
656
  syncWorkspacesFromThreads,
657
657
  takenTeamSlugsForOrchestration
658
- } from "./chunk-RDXODLEN.js";
658
+ } from "./chunk-O7JSWISN.js";
659
659
  import {
660
660
  GITHUB_PR_BODY_MAX_CHARS,
661
661
  GITHUB_PR_BODY_SAFE_CHARS,
@@ -744,7 +744,7 @@ import {
744
744
  suggestSlug,
745
745
  switchWorktreeBranch,
746
746
  warmGithubAgentAuth
747
- } from "./chunk-R2C45NHT.js";
747
+ } from "./chunk-P4QRDXRY.js";
748
748
  import {
749
749
  FAMOUS_SOCCER_TEAMS,
750
750
  WEEKDAY_LABELS,
@@ -800,7 +800,7 @@ import {
800
800
  worktreeNameFromPath,
801
801
  worktreeSlugForTicket,
802
802
  writeThread
803
- } from "./chunk-Y6OHM672.js";
803
+ } from "./chunk-QVLDZWHZ.js";
804
804
  import "./chunk-QKHEVSB5.js";
805
805
  import {
806
806
  BRIGHTSY_OAUTH_CLIENT_ID,
@@ -1086,7 +1086,7 @@ import {
1086
1086
  withTurnScopedCost,
1087
1087
  writeSecureJson,
1088
1088
  writeViewerContext
1089
- } from "./chunk-D446IWPP.js";
1089
+ } from "./chunk-EY5BJAPV.js";
1090
1090
  import {
1091
1091
  stripNestedElectronEnv
1092
1092
  } from "./chunk-4TR3HZFT.js";
@@ -5198,7 +5198,7 @@ var SLACK_OAUTH_RESULT_PATH = "/slack/oauth/result";
5198
5198
  var SLACK_RELAY_DESKTOP_PATH = "/slack/desktop";
5199
5199
  var SLACK_OAUTH_LOCAL_PORT = 19847;
5200
5200
  var SLACK_OAUTH_LOCAL_CALLBACK = `http://127.0.0.1:${SLACK_OAUTH_LOCAL_PORT}${SLACK_OAUTH_CALLBACK_PATH}`;
5201
- var SLACK_OAUTH_REDIRECT = `https://relay.sideboard.cloud${SLACK_OAUTH_CALLBACK_PATH}`;
5201
+ var SLACK_OAUTH_REDIRECT = `https://relay.sideboard.build${SLACK_OAUTH_CALLBACK_PATH}`;
5202
5202
  function slackOAuthRedirectUri() {
5203
5203
  return process.env.SIDEBOARD_SLACK_OAUTH_REDIRECT?.trim() || SLACK_OAUTH_REDIRECT;
5204
5204
  }
@@ -5233,7 +5233,7 @@ function parseSlackOAuthResultUrl(reqUrl) {
5233
5233
 
5234
5234
  // src/slack/baked-app.ts
5235
5235
  var BAKED_SLACK_CLIENT_ID = "7592788819232.11813536272562";
5236
- var BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.cloud/slack/desktop";
5236
+ var BAKED_SLACK_RELAY_URL = "wss://relay.sideboard.build/slack/desktop";
5237
5237
  function hasBakedSlackOAuth() {
5238
5238
  return Boolean(BAKED_SLACK_CLIENT_ID.trim());
5239
5239
  }
@@ -7456,7 +7456,9 @@ async function startRelayServer(opts) {
7456
7456
  }
7457
7457
  const hostname2 = requestHostname(req);
7458
7458
  const canonical = (opts.canonicalSiteHost ?? "www.sideboard.cloud").toLowerCase();
7459
- if (opts.redirectHosts?.includes(hostname2) && hostname2 !== canonical) {
7459
+ const staticHosts = opts.staticHosts ?? [];
7460
+ const servesSite = staticHosts.length > 0 && staticHosts.includes(hostname2);
7461
+ if (opts.redirectHosts?.includes(hostname2) && hostname2 !== canonical && !servesSite) {
7460
7462
  res.writeHead(301, { Location: `https://${canonical}${reqUrl}` });
7461
7463
  res.end();
7462
7464
  return;
@@ -7685,7 +7687,7 @@ async function startHeadlessHost(opts) {
7685
7687
  };
7686
7688
  const refreshRunning = async () => {
7687
7689
  try {
7688
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-YY2JUYKD.js");
7690
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-LI6EBD2Y.js");
7689
7691
  agentsRunning = getOrchestrator2().getRuntime().running;
7690
7692
  } catch {
7691
7693
  agentsRunning = 0;
@@ -9828,7 +9830,7 @@ async function handleJobStop(params, _ctx) {
9828
9830
  return stopDetachedJob(jobCwd(rec), id, reason ? { reason } : void 0);
9829
9831
  }
9830
9832
  async function defaultTurnWait(ref, timeoutMs) {
9831
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-YY2JUYKD.js");
9833
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-LI6EBD2Y.js");
9832
9834
  const orch = getOrchestrator2();
9833
9835
  const thread = await orch.waitForTurn(ref, timeoutMs, {
9834
9836
  resolveIfStillRunning: true
@@ -10181,7 +10183,7 @@ async function startMcpServer() {
10181
10183
  );
10182
10184
  }
10183
10185
  try {
10184
- const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-A5D364JD.js");
10186
+ const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-JAEV53LB.js");
10185
10187
  orch.setMaxConcurrent(maxConcurrentAgents2());
10186
10188
  } catch {
10187
10189
  }
@@ -10729,7 +10731,7 @@ async function startMcpServer() {
10729
10731
  if (!worktreeProfile) {
10730
10732
  registerConnectedIssueVendorTools(server);
10731
10733
  const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-ZNUEZGHB.js");
10732
- const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-A5D364JD.js");
10734
+ const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-JAEV53LB.js");
10733
10735
  const accountDefaults = resolveThreadDefaults2();
10734
10736
  const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
10735
10737
  server.tool(
@@ -13496,7 +13498,7 @@ async function continueSourceThread(threadId, prompt) {
13496
13498
  await continueOnReply(threadId, prompt);
13497
13499
  return;
13498
13500
  }
13499
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-YY2JUYKD.js");
13501
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-LI6EBD2Y.js");
13500
13502
  await getOrchestrator2().send(threadId, prompt);
13501
13503
  } catch {
13502
13504
  }
@@ -27,12 +27,12 @@ import {
27
27
  rewriteLinearError,
28
28
  updateLinearIssue,
29
29
  validateLinearApiKey
30
- } from "./chunk-TUH4ICHQ.js";
30
+ } from "./chunk-277I5IBI.js";
31
31
  import "./chunk-OYRN356W.js";
32
32
  import "./chunk-F6GE7V3Q.js";
33
33
  import "./chunk-N2WW62LF.js";
34
34
  import "./chunk-2GPQZZLY.js";
35
- import "./chunk-EJRCHCXM.js";
35
+ import "./chunk-7BAS6DF7.js";
36
36
  import "./chunk-NSTQ6QKD.js";
37
37
  import "./chunk-WWUABK6B.js";
38
38
  import "./chunk-FJZWM2ON.js";
@@ -25,12 +25,12 @@ import {
25
25
  rewriteLinearError,
26
26
  updateLinearIssue,
27
27
  validateLinearApiKey
28
- } from "./chunk-SFXGD5KJ.js";
28
+ } from "./chunk-7MPRTC6X.js";
29
29
  import "./chunk-DBKHL7NC.js";
30
30
  import "./chunk-W3ZLE4PO.js";
31
31
  import "./chunk-JAT3JFOS.js";
32
32
  import "./chunk-6K64FJDD.js";
33
- import "./chunk-D446IWPP.js";
33
+ import "./chunk-EY5BJAPV.js";
34
34
  import "./chunk-4TR3HZFT.js";
35
35
  import "./chunk-WDRMZKVB.js";
36
36
  import "./chunk-KI45T4DI.js";
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  listAssignedLinearIssues
5
- } from "./chunk-UMXBH344.js";
5
+ } from "./chunk-NCFYUUSC.js";
6
6
  export {
7
7
  listAssignedLinearIssues
8
8
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listAssignedLinearIssues
3
- } from "./chunk-ATQLP22S.js";
3
+ } from "./chunk-ZT5YPYZE.js";
4
4
  export {
5
5
  listAssignedLinearIssues
6
6
  };
@@ -4078,6 +4078,7 @@ function normalizeRemoteRelayUrl(raw) {
4078
4078
  url.pathname = REMOTE_RELAY_PATH;
4079
4079
  url.search = "";
4080
4080
  url.hash = "";
4081
+ if (url.hostname === "relay.sideboard.cloud") url.hostname = "relay.sideboard.build";
4081
4082
  return url.toString();
4082
4083
  }
4083
4084
  function remoteRelayUrl(configured) {
@@ -4092,7 +4093,7 @@ var init_protocol = __esm({
4092
4093
  "src/remote/protocol.ts"() {
4093
4094
  "use strict";
4094
4095
  REMOTE_RELAY_PATH = "/remote";
4095
- BAKED_REMOTE_RELAY_URL = `wss://relay.sideboard.cloud${REMOTE_RELAY_PATH}`;
4096
+ BAKED_REMOTE_RELAY_URL = `wss://relay.sideboard.build${REMOTE_RELAY_PATH}`;
4096
4097
  }
4097
4098
  });
4098
4099
 
@@ -23825,9 +23826,9 @@ var init_abletime_oauth = __esm({
23825
23826
  ABLETIME_OAUTH_CALLBACK_PATH = "/oauth/abletime/callback";
23826
23827
  ABLETIME_OAUTH_PORT = 19849;
23827
23828
  ABLETIME_OAUTH_LOCAL_CALLBACK = `http://127.0.0.1:${ABLETIME_OAUTH_PORT}/callback`;
23828
- ABLETIME_OAUTH_REDIRECT = `https://www.sideboard.cloud${ABLETIME_OAUTH_CALLBACK_PATH}`;
23829
+ ABLETIME_OAUTH_REDIRECT = `https://www.sideboard.build${ABLETIME_OAUTH_CALLBACK_PATH}`;
23829
23830
  BOUNCE_QUERY_KEYS = ["code", "state", "error", "error_description"];
23830
- BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.cloud/oauth/abletime-client.json";
23831
+ BAKED_ABLETIME_OAUTH_CLIENT_ID = "https://www.sideboard.build/oauth/abletime-client.json";
23831
23832
  ABLETIME_OAUTH_RESOURCE = `${DEFAULT_ABLETIME_HOST}/api/public/v2/mcp`;
23832
23833
  REFRESH_SKEW_MS3 = 5 * 6e4;
23833
23834
  refreshInFlight3 = null;