@sideboard-ai/core 0.1.130 → 0.1.133

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 (51) hide show
  1. package/dist/abletime-DDTV7WO3.js +36 -0
  2. package/dist/abletime-VTP4JR63.js +37 -0
  3. package/dist/agents/cursor-runner.js +1 -1
  4. package/dist/{agents-7BUQY2WX.js → agents-NHS6P25H.js} +8 -6
  5. package/dist/{agents-X2I3RNCY.js → agents-SOU5GPWI.js} +9 -7
  6. package/dist/{app-settings-6RPALX4J.js → app-settings-U5RZKUXG.js} +11 -1
  7. package/dist/{app-settings-E7NEQY7D.js → app-settings-YQ7YX2CC.js} +11 -1
  8. package/dist/chunk-2XXAAIN3.js +463 -0
  9. package/dist/{chunk-VE22NWBD.js → chunk-3UVVWNHF.js} +2 -2
  10. package/dist/{chunk-NV73AO7Q.js → chunk-4YAVXWFR.js} +21 -9
  11. package/dist/{chunk-RSFCB23A.js → chunk-6CRKPD4C.js} +4 -3
  12. package/dist/chunk-6GN5WPYZ.js +31 -0
  13. package/dist/{chunk-ZMUOPTKZ.js → chunk-AK7SWE2U.js} +55 -12
  14. package/dist/chunk-AT346U23.js +468 -0
  15. package/dist/{chunk-YMRT2DU6.js → chunk-ED4UPEJX.js} +25 -50
  16. package/dist/chunk-ELBYOGVA.js +32 -0
  17. package/dist/{chunk-IUJOI7KK.js → chunk-FSCQXMGI.js} +35 -4
  18. package/dist/{chunk-HUYEU4GS.js → chunk-GJBHOJCZ.js} +83 -2
  19. package/dist/{chunk-ZND6XV6J.js → chunk-GKKHXZCT.js} +83 -2
  20. package/dist/{chunk-HZPO3SSZ.js → chunk-IM36S4HZ.js} +4 -3
  21. package/dist/{chunk-EKIDHL2T.js → chunk-KBWND62T.js} +32 -55
  22. package/dist/{chunk-HULESWLI.js → chunk-LTP7GHIF.js} +3 -3
  23. package/dist/chunk-M267JPEA.js +103 -0
  24. package/dist/{chunk-HRSBZIXS.js → chunk-Q6XQXCOM.js} +1 -1
  25. package/dist/chunk-S42XV45P.js +104 -0
  26. package/dist/{chunk-YALVX3UE.js → chunk-TG7YU2KG.js} +157 -40
  27. package/dist/{chunk-FMBLOOAO.js → chunk-VSON7EJ6.js} +155 -39
  28. package/dist/{chunk-UDQI3N47.js → chunk-WEU5M7BW.js} +1 -1
  29. package/dist/{chunk-SYLTXDRF.js → chunk-Y645NFYN.js} +2 -2
  30. package/dist/{chunk-MNL4FSKY.js → chunk-YEIH7P7D.js} +3 -3
  31. package/dist/{connected-teams-ZCOU6KCD.js → connected-teams-4A2AXDNN.js} +3 -1
  32. package/dist/{connected-teams-O6D4PM7A.js → connected-teams-IJUJQ7R6.js} +3 -1
  33. package/dist/{coordinator-prompt-SPJSGAQS.js → coordinator-prompt-DXHEDRRN.js} +3 -3
  34. package/dist/{coordinator-prompt-MEEUOEF2.js → coordinator-prompt-XF7LVOUN.js} +3 -3
  35. package/dist/{global-workspace-KNESLWKG.js → global-workspace-2LO5ATOH.js} +4 -4
  36. package/dist/{global-workspace-BMWP7YZC.js → global-workspace-MLQNULOU.js} +4 -4
  37. package/dist/index.cjs +1410 -425
  38. package/dist/index.d.cts +224 -16
  39. package/dist/index.d.ts +224 -16
  40. package/dist/index.js +461 -292
  41. package/dist/mcp/run-stdio.cjs +1261 -342
  42. package/dist/mcp/run-stdio.js +340 -209
  43. package/dist/oauth-A7XXI2TM.js +11 -0
  44. package/dist/oauth-YJBAURIJ.js +13 -0
  45. package/dist/{orchestrator-3ZSFTG72.js → orchestrator-KR5RA5B7.js} +10 -8
  46. package/dist/{orchestrator-G6DU3AF3.js → orchestrator-P2SYHVLS.js} +11 -9
  47. package/dist/{workspaces-O4QZOASB.js → workspaces-ARWPZG6F.js} +5 -5
  48. package/dist/{workspaces-HSYRYJYV.js → workspaces-MINB764G.js} +5 -5
  49. package/dist/{worktree-ERHC7Q4F.js → worktree-EBZMUUAL.js} +2 -2
  50. package/dist/{worktree-JVGSLSLJ.js → worktree-S7MKMYAT.js} +2 -2
  51. package/package.json +1 -1
@@ -1,3 +1,10 @@
1
+ import {
2
+ brightsyAccessTokenNeedsRefresh,
3
+ ensureBrightsyLocalConfigFresh,
4
+ loadBrightsyConfig,
5
+ refreshBrightsyAccessToken,
6
+ saveBrightsyConfig
7
+ } from "./chunk-M267JPEA.js";
1
8
  import {
2
9
  appDataDir
3
10
  } from "./chunk-QZQEXME2.js";
@@ -6,37 +13,12 @@ import {
6
13
  } from "./chunk-DVM4ID64.js";
7
14
 
8
15
  // src/brightsy/connected-teams.ts
9
- import { existsSync as existsSync2, mkdirSync, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
10
- import { join as join2 } from "path";
11
-
12
- // src/brightsy/config.ts
13
- import { existsSync, readFileSync, writeFileSync } from "fs";
14
- import { homedir } from "os";
16
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
15
17
  import { join } from "path";
16
- function brightsyConfigPath() {
17
- return join(homedir(), ".brightsy", "config.json");
18
- }
19
- function loadBrightsyConfig() {
20
- const path = brightsyConfigPath();
21
- if (!existsSync(path)) {
22
- throw new Error("Brightsy not logged in \u2014 run `brightsy login` first");
23
- }
24
- const raw = JSON.parse(readFileSync(path, "utf8"));
25
- if (!raw.access_token || !raw.account_id) {
26
- throw new Error("Brightsy config incomplete \u2014 run `brightsy login`");
27
- }
28
- return raw;
29
- }
30
- function saveBrightsyConfig(cfg) {
31
- writeFileSync(brightsyConfigPath(), `${JSON.stringify(cfg, null, 2)}
32
- `, {
33
- mode: 384
34
- });
35
- }
36
18
 
37
19
  // src/brightsy/accounts.ts
38
20
  async function loadConnectedTeams() {
39
- const { listConnectedBrightsyTeams: listConnectedBrightsyTeams2 } = await import("./connected-teams-ZCOU6KCD.js");
21
+ const { listConnectedBrightsyTeams: listConnectedBrightsyTeams2 } = await import("./connected-teams-4A2AXDNN.js");
40
22
  return listConnectedBrightsyTeams2();
41
23
  }
42
24
  async function runBrightsyTeamsJson(args) {
@@ -64,11 +46,15 @@ async function listBrightsyAccounts() {
64
46
  }
65
47
  async function getBrightsySession() {
66
48
  try {
49
+ const { ensureBrightsyLocalConfigFresh: ensureBrightsyLocalConfigFresh2 } = await import("./oauth-A7XXI2TM.js");
50
+ const { ensureConnectedBrightsyTeamTokens: ensureConnectedBrightsyTeamTokens2 } = await import("./connected-teams-4A2AXDNN.js");
51
+ await ensureBrightsyLocalConfigFresh2();
52
+ await ensureConnectedBrightsyTeamTokens2();
67
53
  loadBrightsyConfig();
68
54
  const data = await runBrightsyTeamsJson([]);
69
55
  const accounts = Array.isArray(data.teams) ? data.teams : [];
70
56
  const active = data.active ?? accounts.find((a) => a.active) ?? null;
71
- const { ensureCliTeamTracked: ensureCliTeamTracked2 } = await import("./connected-teams-ZCOU6KCD.js");
57
+ const { ensureCliTeamTracked: ensureCliTeamTracked2 } = await import("./connected-teams-4A2AXDNN.js");
72
58
  const connectedTeams = ensureCliTeamTracked2(
73
59
  active ? { id: active.id, slug: active.slug, name: active.name } : void 0
74
60
  );
@@ -108,20 +94,20 @@ async function performBrightsyAccountSwitch(accountIdOrSlug) {
108
94
  return { cfg, target: data.active };
109
95
  }
110
96
  async function switchBrightsyAccount(accountIdOrSlug) {
111
- const { connectBrightsyTeam: connectBrightsyTeam2 } = await import("./connected-teams-ZCOU6KCD.js");
97
+ const { connectBrightsyTeam: connectBrightsyTeam2 } = await import("./connected-teams-4A2AXDNN.js");
112
98
  await connectBrightsyTeam2(accountIdOrSlug);
113
99
  return getBrightsySession();
114
100
  }
115
101
 
116
102
  // src/brightsy/connected-teams.ts
117
103
  function storePath() {
118
- return join2(appDataDir(), "brightsy-teams.json");
104
+ return join(appDataDir(), "brightsy-teams.json");
119
105
  }
120
106
  function readStore() {
121
107
  const path = storePath();
122
- if (!existsSync2(path)) return [];
108
+ if (!existsSync(path)) return [];
123
109
  try {
124
- const parsed = JSON.parse(readFileSync2(path, "utf8"));
110
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
125
111
  return Array.isArray(parsed.teams) ? parsed.teams : [];
126
112
  } catch {
127
113
  return [];
@@ -130,7 +116,7 @@ function readStore() {
130
116
  function writeStore(teams) {
131
117
  mkdirSync(appDataDir(), { recursive: true });
132
118
  const path = storePath();
133
- writeFileSync2(path, `${JSON.stringify({ teams }, null, 2)}
119
+ writeFileSync(path, `${JSON.stringify({ teams }, null, 2)}
134
120
  `, {
135
121
  mode: 384
136
122
  });
@@ -166,7 +152,6 @@ function applyConnectedTeamToCli(team) {
166
152
  }
167
153
  async function refreshTeamToken(team) {
168
154
  if (!team.refresh_token) return team;
169
- const endpoint = (team.endpoint || "https://brightsy.ai").replace(/\/$/, "");
170
155
  const cfg = (() => {
171
156
  try {
172
157
  return loadBrightsyConfig();
@@ -174,39 +159,34 @@ async function refreshTeamToken(team) {
174
159
  return null;
175
160
  }
176
161
  })();
177
- const clientId = cfg?.oauth_client_id || "brightsy-cli";
178
- const res = await fetch(`${endpoint}/oauth/token`, {
179
- method: "POST",
180
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
181
- body: new URLSearchParams({
182
- grant_type: "refresh_token",
183
- refresh_token: team.refresh_token,
184
- client_id: clientId
185
- })
162
+ const grant = await refreshBrightsyAccessToken({
163
+ endpoint: team.endpoint || "https://brightsy.ai",
164
+ refreshToken: team.refresh_token,
165
+ clientId: cfg?.oauth_client_id
186
166
  });
187
- if (!res.ok) return team;
188
- const data = await res.json();
189
- if (!data.access_token) return team;
167
+ if (!grant) return team;
190
168
  return {
191
169
  ...team,
192
- access_token: data.access_token,
193
- refresh_token: data.refresh_token || team.refresh_token,
194
- expires_at: data.expires_in ? Date.now() + data.expires_in * 1e3 : team.expires_at
170
+ access_token: grant.access_token,
171
+ refresh_token: grant.refresh_token || team.refresh_token,
172
+ expires_at: grant.expires_at ?? team.expires_at
195
173
  };
196
174
  }
197
175
  async function ensureConnectedBrightsyTeamTokens() {
176
+ await ensureBrightsyLocalConfigFresh().catch(() => null);
198
177
  const teams = readStore();
199
178
  if (teams.length === 0) return [];
200
179
  const next = [];
201
180
  let changed = false;
202
181
  for (const team of teams) {
203
- const expired = typeof team.expires_at === "number" && Date.now() >= team.expires_at - 6e4;
204
- if (!expired) {
182
+ if (!team.refresh_token || !brightsyAccessTokenNeedsRefresh(team.expires_at)) {
205
183
  next.push(team);
206
184
  continue;
207
185
  }
208
186
  const refreshed = await refreshTeamToken(team);
209
- if (refreshed.access_token !== team.access_token) changed = true;
187
+ if (refreshed.access_token !== team.access_token || refreshed.refresh_token !== team.refresh_token || refreshed.expires_at !== team.expires_at) {
188
+ changed = true;
189
+ }
210
190
  next.push(refreshed);
211
191
  }
212
192
  if (changed) writeStore(next);
@@ -294,9 +274,6 @@ function brightsyMcpServerName(slug) {
294
274
  }
295
275
 
296
276
  export {
297
- brightsyConfigPath,
298
- loadBrightsyConfig,
299
- saveBrightsyConfig,
300
277
  listBrightsyAccounts,
301
278
  getBrightsySession,
302
279
  switchBrightsyAccount,
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  ensureGlobalCoordinatorCwd
3
- } from "./chunk-HZPO3SSZ.js";
3
+ } from "./chunk-IM36S4HZ.js";
4
4
  import {
5
5
  allocateTeamName,
6
6
  takenSlugsFromThread,
7
7
  teamSlugFromName
8
- } from "./chunk-UDQI3N47.js";
8
+ } from "./chunk-WEU5M7BW.js";
9
9
  import {
10
10
  resolveNewThreadOptions,
11
11
  resolveThreadDefaults
12
- } from "./chunk-HUYEU4GS.js";
12
+ } from "./chunk-GJBHOJCZ.js";
13
13
  import {
14
14
  createEmptyThread,
15
15
  listThreads,
@@ -0,0 +1,103 @@
1
+ import {
2
+ formatFetchError
3
+ } from "./chunk-ELBYOGVA.js";
4
+
5
+ // src/brightsy/config.ts
6
+ import { existsSync, readFileSync, writeFileSync } from "fs";
7
+ import { homedir } from "os";
8
+ import { join } from "path";
9
+ function brightsyConfigPath() {
10
+ const override = process.env.BRIGHTSY_CONFIG?.trim();
11
+ if (override) return override;
12
+ return join(homedir(), ".brightsy", "config.json");
13
+ }
14
+ function loadBrightsyConfig() {
15
+ const path = brightsyConfigPath();
16
+ if (!existsSync(path)) {
17
+ throw new Error("Brightsy not logged in \u2014 run `brightsy login` first");
18
+ }
19
+ const raw = JSON.parse(readFileSync(path, "utf8"));
20
+ if (!raw.access_token || !raw.account_id) {
21
+ throw new Error("Brightsy config incomplete \u2014 run `brightsy login`");
22
+ }
23
+ return raw;
24
+ }
25
+ function saveBrightsyConfig(cfg) {
26
+ writeFileSync(brightsyConfigPath(), `${JSON.stringify(cfg, null, 2)}
27
+ `, {
28
+ mode: 384
29
+ });
30
+ }
31
+
32
+ // src/brightsy/oauth.ts
33
+ var REFRESH_SKEW_MS = 6e4;
34
+ function brightsyAccessTokenNeedsRefresh(expiresAt, now = Date.now()) {
35
+ if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt) || expiresAt <= 0) {
36
+ return true;
37
+ }
38
+ return now >= expiresAt - REFRESH_SKEW_MS;
39
+ }
40
+ function applyGrant(current, grant) {
41
+ return {
42
+ access_token: grant.access_token,
43
+ refresh_token: grant.refresh_token || current.refresh_token,
44
+ expires_at: grant.expires_at ?? current.expires_at
45
+ };
46
+ }
47
+ async function refreshBrightsyAccessToken(opts) {
48
+ const endpoint = (opts.endpoint || "https://brightsy.ai").replace(/\/$/, "");
49
+ const url = `${endpoint}/oauth/token`;
50
+ const fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);
51
+ let res;
52
+ try {
53
+ res = await fetchImpl(url, {
54
+ method: "POST",
55
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
56
+ body: new URLSearchParams({
57
+ grant_type: "refresh_token",
58
+ refresh_token: opts.refreshToken,
59
+ client_id: opts.clientId || "brightsy-cli"
60
+ })
61
+ });
62
+ } catch (err) {
63
+ throw new Error(formatFetchError(err, url));
64
+ }
65
+ if (!res.ok) return null;
66
+ const data = await res.json();
67
+ if (!data.access_token) return null;
68
+ return {
69
+ access_token: data.access_token,
70
+ refresh_token: data.refresh_token,
71
+ expires_at: data.expires_in ? Date.now() + data.expires_in * 1e3 : void 0
72
+ };
73
+ }
74
+ async function ensureBrightsyLocalConfigFresh(opts) {
75
+ let cfg;
76
+ try {
77
+ cfg = loadBrightsyConfig();
78
+ } catch {
79
+ return null;
80
+ }
81
+ if (!cfg.refresh_token || !brightsyAccessTokenNeedsRefresh(cfg.expires_at)) {
82
+ return cfg;
83
+ }
84
+ const grant = await refreshBrightsyAccessToken({
85
+ endpoint: cfg.endpoint || "https://brightsy.ai",
86
+ refreshToken: cfg.refresh_token,
87
+ clientId: cfg.oauth_client_id,
88
+ fetchImpl: opts?.fetchImpl
89
+ });
90
+ if (!grant) return cfg;
91
+ const next = { ...cfg, ...applyGrant(cfg, grant) };
92
+ saveBrightsyConfig(next);
93
+ return next;
94
+ }
95
+
96
+ export {
97
+ brightsyConfigPath,
98
+ loadBrightsyConfig,
99
+ saveBrightsyConfig,
100
+ brightsyAccessTokenNeedsRefresh,
101
+ refreshBrightsyAccessToken,
102
+ ensureBrightsyLocalConfigFresh
103
+ };
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  getGithubGitAuthMode,
16
16
  getGithubPat
17
- } from "./chunk-ZND6XV6J.js";
17
+ } from "./chunk-GKKHXZCT.js";
18
18
  import {
19
19
  worktreesRoot
20
20
  } from "./chunk-BD2ICC4D.js";
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env node
2
+
3
+ import {
4
+ formatFetchError
5
+ } from "./chunk-6GN5WPYZ.js";
6
+
7
+ // src/brightsy/config.ts
8
+ import { existsSync, readFileSync, writeFileSync } from "fs";
9
+ import { homedir } from "os";
10
+ import { join } from "path";
11
+ function brightsyConfigPath() {
12
+ const override = process.env.BRIGHTSY_CONFIG?.trim();
13
+ if (override) return override;
14
+ return join(homedir(), ".brightsy", "config.json");
15
+ }
16
+ function loadBrightsyConfig() {
17
+ const path = brightsyConfigPath();
18
+ if (!existsSync(path)) {
19
+ throw new Error("Brightsy not logged in \u2014 run `brightsy login` first");
20
+ }
21
+ const raw = JSON.parse(readFileSync(path, "utf8"));
22
+ if (!raw.access_token || !raw.account_id) {
23
+ throw new Error("Brightsy config incomplete \u2014 run `brightsy login`");
24
+ }
25
+ return raw;
26
+ }
27
+ function saveBrightsyConfig(cfg) {
28
+ writeFileSync(brightsyConfigPath(), `${JSON.stringify(cfg, null, 2)}
29
+ `, {
30
+ mode: 384
31
+ });
32
+ }
33
+
34
+ // src/brightsy/oauth.ts
35
+ var REFRESH_SKEW_MS = 6e4;
36
+ function brightsyAccessTokenNeedsRefresh(expiresAt, now = Date.now()) {
37
+ if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt) || expiresAt <= 0) {
38
+ return true;
39
+ }
40
+ return now >= expiresAt - REFRESH_SKEW_MS;
41
+ }
42
+ function applyGrant(current, grant) {
43
+ return {
44
+ access_token: grant.access_token,
45
+ refresh_token: grant.refresh_token || current.refresh_token,
46
+ expires_at: grant.expires_at ?? current.expires_at
47
+ };
48
+ }
49
+ async function refreshBrightsyAccessToken(opts) {
50
+ const endpoint = (opts.endpoint || "https://brightsy.ai").replace(/\/$/, "");
51
+ const url = `${endpoint}/oauth/token`;
52
+ const fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);
53
+ let res;
54
+ try {
55
+ res = await fetchImpl(url, {
56
+ method: "POST",
57
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
58
+ body: new URLSearchParams({
59
+ grant_type: "refresh_token",
60
+ refresh_token: opts.refreshToken,
61
+ client_id: opts.clientId || "brightsy-cli"
62
+ })
63
+ });
64
+ } catch (err) {
65
+ throw new Error(formatFetchError(err, url));
66
+ }
67
+ if (!res.ok) return null;
68
+ const data = await res.json();
69
+ if (!data.access_token) return null;
70
+ return {
71
+ access_token: data.access_token,
72
+ refresh_token: data.refresh_token,
73
+ expires_at: data.expires_in ? Date.now() + data.expires_in * 1e3 : void 0
74
+ };
75
+ }
76
+ async function ensureBrightsyLocalConfigFresh(opts) {
77
+ let cfg;
78
+ try {
79
+ cfg = loadBrightsyConfig();
80
+ } catch {
81
+ return null;
82
+ }
83
+ if (!cfg.refresh_token || !brightsyAccessTokenNeedsRefresh(cfg.expires_at)) {
84
+ return cfg;
85
+ }
86
+ const grant = await refreshBrightsyAccessToken({
87
+ endpoint: cfg.endpoint || "https://brightsy.ai",
88
+ refreshToken: cfg.refresh_token,
89
+ clientId: cfg.oauth_client_id,
90
+ fetchImpl: opts?.fetchImpl
91
+ });
92
+ if (!grant) return cfg;
93
+ const next = { ...cfg, ...applyGrant(cfg, grant) };
94
+ saveBrightsyConfig(next);
95
+ return next;
96
+ }
97
+
98
+ export {
99
+ loadBrightsyConfig,
100
+ saveBrightsyConfig,
101
+ brightsyAccessTokenNeedsRefresh,
102
+ refreshBrightsyAccessToken,
103
+ ensureBrightsyLocalConfigFresh
104
+ };