@sideboard-ai/core 0.1.139 → 0.1.143

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 (63) hide show
  1. package/dist/{abletime-VTP4JR63.js → abletime-DI55AJX3.js} +2 -2
  2. package/dist/{abletime-DDTV7WO3.js → abletime-QEVAE67D.js} +2 -2
  3. package/dist/agents/cursor-runner.cjs +0 -0
  4. package/dist/agents/cursor-runner.js +1 -1
  5. package/dist/{agents-665S7Z3R.js → agents-E5AAMHDY.js} +11 -7
  6. package/dist/{agents-OC3XM7UE.js → agents-OEEOIKUB.js} +10 -6
  7. package/dist/{app-settings-U5RZKUXG.js → app-settings-WJDCJFSY.js} +3 -1
  8. package/dist/{app-settings-YQ7YX2CC.js → app-settings-ZCN632OJ.js} +3 -1
  9. package/dist/caffeinate-hold-NBRUWYXO.js +0 -0
  10. package/dist/{chunk-HLIHBGVO.js → chunk-4D4PEBGB.js} +2 -2
  11. package/dist/{chunk-DJJ3DTT4.js → chunk-4Q45TLZ5.js} +7 -7
  12. package/dist/chunk-6GN5WPYZ.js +0 -0
  13. package/dist/chunk-B3SJXYIJ.js +0 -0
  14. package/dist/chunk-BD2ICC4D.js +0 -0
  15. package/dist/{chunk-GKKHXZCT.js → chunk-BGQBELGJ.js} +201 -2
  16. package/dist/{chunk-2XXAAIN3.js → chunk-BOD5V52W.js} +1 -1
  17. package/dist/{chunk-23KCPND2.js → chunk-CG25RYQQ.js} +47 -40
  18. package/dist/{chunk-YZQEJOAU.js → chunk-EAP4SMR3.js} +342 -36
  19. package/dist/chunk-ED4UPEJX.js +0 -0
  20. package/dist/chunk-EUXOHTUK.js +0 -0
  21. package/dist/{chunk-5XH5M6RA.js → chunk-FADNFPZO.js} +3 -3
  22. package/dist/{chunk-SSBM4GZX.js → chunk-HC5N3BDL.js} +2 -2
  23. package/dist/{chunk-GJBHOJCZ.js → chunk-I77RYPOH.js} +201 -2
  24. package/dist/chunk-KGZBYWZ3.js +0 -0
  25. package/dist/chunk-KLBOWJ74.js +0 -0
  26. package/dist/{chunk-ZCLHAOFR.js → chunk-KP4OJUPH.js} +551 -39
  27. package/dist/chunk-KPIYENTF.js +0 -0
  28. package/dist/chunk-N5PM7HGQ.js +0 -0
  29. package/dist/chunk-NSTQ6QKD.js +0 -0
  30. package/dist/{chunk-DKXZCIB2.js → chunk-O3JEC2UJ.js} +7 -7
  31. package/dist/{chunk-RTX3AY42.js → chunk-OHWN4JEL.js} +5 -3
  32. package/dist/{chunk-E2RE7P2S.js → chunk-R2W7A2UO.js} +3 -3
  33. package/dist/chunk-S42XV45P.js +0 -0
  34. package/dist/{chunk-7SYFWPOZ.js → chunk-UG5N7ET3.js} +5 -3
  35. package/dist/{chunk-CDJISVKN.js → chunk-VHTIHOHE.js} +47 -41
  36. package/dist/{chunk-AT346U23.js → chunk-VZJVKQHH.js} +1 -1
  37. package/dist/{chunk-FSCQXMGI.js → chunk-WT5HSFOU.js} +1 -0
  38. package/dist/connected-teams-IJUJQ7R6.js +0 -0
  39. package/dist/{coordinator-prompt-43O6EPA2.js → coordinator-prompt-2LD3C74O.js} +3 -3
  40. package/dist/{coordinator-prompt-4TXU6Q3R.js → coordinator-prompt-FBX7Y4EM.js} +3 -3
  41. package/dist/cursor-recover-NOQYOFRF.js +0 -0
  42. package/dist/{global-workspace-ZDYKHQ4O.js → global-workspace-NG7SU3GV.js} +4 -4
  43. package/dist/{global-workspace-VIU57E3Y.js → global-workspace-OCV77UYF.js} +4 -4
  44. package/dist/index.cjs +945 -129
  45. package/dist/index.d.cts +249 -62
  46. package/dist/index.d.ts +249 -62
  47. package/dist/index.js +110 -14
  48. package/dist/mcp/run-stdio.cjs +646 -112
  49. package/dist/mcp/run-stdio.js +12 -12
  50. package/dist/oauth-YJBAURIJ.js +0 -0
  51. package/dist/{orchestrator-ZCMYSDTC.js → orchestrator-TDJZKQPT.js} +7 -7
  52. package/dist/{orchestrator-WEFXUHFX.js → orchestrator-VIFXOHF4.js} +8 -8
  53. package/dist/paths-QCI3MTO5.js +0 -0
  54. package/dist/plan-file-PHVKUAEE.js +0 -0
  55. package/dist/run-USF6FRKV.js +0 -0
  56. package/dist/thread-store-57ZLHR3A.js +0 -0
  57. package/dist/title-4WAKWZRF.js +0 -0
  58. package/dist/{workspaces-4HYGNH4B.js → workspaces-4FUQW5LD.js} +5 -5
  59. package/dist/{workspaces-ALCTB65T.js → workspaces-PU5YHQ7Z.js} +5 -5
  60. package/dist/{worktree-GXD2NGOZ.js → worktree-GKLPPNWR.js} +2 -2
  61. package/dist/{worktree-NSNZODAM.js → worktree-Z22HTSCU.js} +2 -2
  62. package/package.json +9 -8
  63. package/LICENSE +0 -190
@@ -14,9 +14,9 @@ import {
14
14
  taskUrl,
15
15
  toAbleTimeIssueInfo,
16
16
  verifyAbleTimeConnection
17
- } from "./chunk-2XXAAIN3.js";
17
+ } from "./chunk-BOD5V52W.js";
18
18
  import "./chunk-6GN5WPYZ.js";
19
- import "./chunk-GKKHXZCT.js";
19
+ import "./chunk-BGQBELGJ.js";
20
20
  import "./chunk-NSTQ6QKD.js";
21
21
  import "./chunk-KGZBYWZ3.js";
22
22
  import "./chunk-BD2ICC4D.js";
@@ -12,9 +12,9 @@ import {
12
12
  taskUrl,
13
13
  toAbleTimeIssueInfo,
14
14
  verifyAbleTimeConnection
15
- } from "./chunk-AT346U23.js";
15
+ } from "./chunk-VZJVKQHH.js";
16
16
  import "./chunk-ELBYOGVA.js";
17
- import "./chunk-GJBHOJCZ.js";
17
+ import "./chunk-I77RYPOH.js";
18
18
  import "./chunk-4TR3HZFT.js";
19
19
  import "./chunk-JT7R45JB.js";
20
20
  import "./chunk-77WWLBCI.js";
File without changes
@@ -12,7 +12,7 @@ import {
12
12
  ensureCursorRipgrepPath,
13
13
  fetchCursorTurnCostUsd,
14
14
  formatUnknownDetail
15
- } from "../chunk-FSCQXMGI.js";
15
+ } from "../chunk-WT5HSFOU.js";
16
16
  import {
17
17
  dropNestedElectronEnvFromProcess
18
18
  } from "../chunk-4TR3HZFT.js";
@@ -11,6 +11,7 @@ import {
11
11
  getAdapter,
12
12
  getAgentSetupInfo,
13
13
  installAgent,
14
+ installNpmGlobalPackage,
14
15
  isCursorAutoModel,
15
16
  isSessionQuotaLimit,
16
17
  listAgentSetupInfo,
@@ -27,8 +28,9 @@ import {
27
28
  prepareTerminalCommand,
28
29
  resolveCursorModelId,
29
30
  resolveLoginCommand,
30
- resolveQuotaFallbackAgent
31
- } from "./chunk-CDJISVKN.js";
31
+ resolveQuotaFallbackAgent,
32
+ whichOnPath
33
+ } from "./chunk-VHTIHOHE.js";
32
34
  import "./chunk-KBWND62T.js";
33
35
  import "./chunk-M267JPEA.js";
34
36
  import {
@@ -36,18 +38,18 @@ import {
36
38
  assertOrchestratorCapableAgent,
37
39
  coerceOrchestratorAgent,
38
40
  isOrchestratorCapableAgent
39
- } from "./chunk-E2RE7P2S.js";
40
- import "./chunk-7SYFWPOZ.js";
41
+ } from "./chunk-R2W7A2UO.js";
42
+ import "./chunk-UG5N7ET3.js";
41
43
  import "./chunk-ELBYOGVA.js";
42
44
  import {
43
45
  cursorSdkMessageToEvents,
44
46
  parseCursorRunnerLine,
45
47
  preferredCursorCostCents,
46
48
  turnCostUsdFromCursorUsage
47
- } from "./chunk-FSCQXMGI.js";
48
- import "./chunk-DKXZCIB2.js";
49
+ } from "./chunk-WT5HSFOU.js";
50
+ import "./chunk-O3JEC2UJ.js";
49
51
  import "./chunk-FKOIHGKV.js";
50
- import "./chunk-GJBHOJCZ.js";
52
+ import "./chunk-I77RYPOH.js";
51
53
  import "./chunk-4TR3HZFT.js";
52
54
  import "./chunk-JT7R45JB.js";
53
55
  import "./chunk-TUGKX5BD.js";
@@ -82,6 +84,7 @@ export {
82
84
  getAdapter,
83
85
  getAgentSetupInfo,
84
86
  installAgent,
87
+ installNpmGlobalPackage,
85
88
  isConductorBundledCli,
86
89
  isCursorAutoModel,
87
90
  isOrchestratorCapableAgent,
@@ -106,5 +109,6 @@ export {
106
109
  resolveLoginCommand,
107
110
  resolveQuotaFallbackAgent,
108
111
  turnCostUsdFromCursorUsage,
112
+ whichOnPath,
109
113
  withExportedPath
110
114
  };
@@ -14,6 +14,7 @@ import {
14
14
  getAdapter,
15
15
  getAgentSetupInfo,
16
16
  installAgent,
17
+ installNpmGlobalPackage,
17
18
  isCursorAutoModel,
18
19
  isSessionQuotaLimit,
19
20
  listAgentSetupInfo,
@@ -33,8 +34,9 @@ import {
33
34
  resolveCursorModelId,
34
35
  resolveLoginCommand,
35
36
  resolveQuotaFallbackAgent,
36
- turnCostUsdFromCursorUsage
37
- } from "./chunk-23KCPND2.js";
37
+ turnCostUsdFromCursorUsage,
38
+ whichOnPath
39
+ } from "./chunk-CG25RYQQ.js";
38
40
  import "./chunk-ED4UPEJX.js";
39
41
  import "./chunk-S42XV45P.js";
40
42
  import "./chunk-6GN5WPYZ.js";
@@ -43,9 +45,9 @@ import {
43
45
  assertOrchestratorCapableAgent,
44
46
  coerceOrchestratorAgent,
45
47
  isOrchestratorCapableAgent
46
- } from "./chunk-5XH5M6RA.js";
47
- import "./chunk-RTX3AY42.js";
48
- import "./chunk-DJJ3DTT4.js";
48
+ } from "./chunk-FADNFPZO.js";
49
+ import "./chunk-OHWN4JEL.js";
50
+ import "./chunk-4Q45TLZ5.js";
49
51
  import "./chunk-B3SJXYIJ.js";
50
52
  import "./chunk-EUXOHTUK.js";
51
53
  import {
@@ -57,7 +59,7 @@ import {
57
59
  resolveCommandBinarySync,
58
60
  withExportedPath
59
61
  } from "./chunk-KPIYENTF.js";
60
- import "./chunk-GKKHXZCT.js";
62
+ import "./chunk-BGQBELGJ.js";
61
63
  import "./chunk-NSTQ6QKD.js";
62
64
  import "./chunk-KGZBYWZ3.js";
63
65
  import "./chunk-BD2ICC4D.js";
@@ -81,6 +83,7 @@ export {
81
83
  getAdapter,
82
84
  getAgentSetupInfo,
83
85
  installAgent,
86
+ installNpmGlobalPackage,
84
87
  isConductorBundledCli,
85
88
  isCursorAutoModel,
86
89
  isOrchestratorCapableAgent,
@@ -105,5 +108,6 @@ export {
105
108
  resolveLoginCommand,
106
109
  resolveQuotaFallbackAgent,
107
110
  turnCostUsdFromCursorUsage,
111
+ whichOnPath,
108
112
  withExportedPath
109
113
  };
@@ -22,6 +22,7 @@ import {
22
22
  deleteBranchOnPurgeEnabled,
23
23
  disconnectAbleTimeConnection,
24
24
  disconnectLinearConnection,
25
+ emptyPublicIntegrations,
25
26
  ensureSlackDeviceIdentity,
26
27
  getAbleTimeAccessToken,
27
28
  getAbleTimeHost,
@@ -63,7 +64,7 @@ import {
63
64
  updateDefaultsSettings,
64
65
  updateIntegrationsSettings,
65
66
  updateOpencodeSettings
66
- } from "./chunk-GJBHOJCZ.js";
67
+ } from "./chunk-I77RYPOH.js";
67
68
  import "./chunk-4TR3HZFT.js";
68
69
  import "./chunk-JT7R45JB.js";
69
70
  import "./chunk-77WWLBCI.js";
@@ -92,6 +93,7 @@ export {
92
93
  deleteBranchOnPurgeEnabled,
93
94
  disconnectAbleTimeConnection,
94
95
  disconnectLinearConnection,
96
+ emptyPublicIntegrations,
95
97
  ensureSlackDeviceIdentity,
96
98
  getAbleTimeAccessToken,
97
99
  getAbleTimeHost,
@@ -24,6 +24,7 @@ import {
24
24
  deleteBranchOnPurgeEnabled,
25
25
  disconnectAbleTimeConnection,
26
26
  disconnectLinearConnection,
27
+ emptyPublicIntegrations,
27
28
  ensureSlackDeviceIdentity,
28
29
  getAbleTimeAccessToken,
29
30
  getAbleTimeHost,
@@ -65,7 +66,7 @@ import {
65
66
  updateDefaultsSettings,
66
67
  updateIntegrationsSettings,
67
68
  updateOpencodeSettings
68
- } from "./chunk-GKKHXZCT.js";
69
+ } from "./chunk-BGQBELGJ.js";
69
70
  import "./chunk-NSTQ6QKD.js";
70
71
  import "./chunk-KGZBYWZ3.js";
71
72
  import "./chunk-BD2ICC4D.js";
@@ -93,6 +94,7 @@ export {
93
94
  deleteBranchOnPurgeEnabled,
94
95
  disconnectAbleTimeConnection,
95
96
  disconnectLinearConnection,
97
+ emptyPublicIntegrations,
96
98
  ensureSlackDeviceIdentity,
97
99
  getAbleTimeAccessToken,
98
100
  getAbleTimeHost,
File without changes
@@ -2,11 +2,11 @@
2
2
 
3
3
  import {
4
4
  isGlobalRepoPath
5
- } from "./chunk-5XH5M6RA.js";
5
+ } from "./chunk-FADNFPZO.js";
6
6
  import {
7
7
  ensureGhPreferOrigin,
8
8
  resolveRepoRoot
9
- } from "./chunk-DJJ3DTT4.js";
9
+ } from "./chunk-4Q45TLZ5.js";
10
10
  import {
11
11
  appDataDir
12
12
  } from "./chunk-BD2ICC4D.js";
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  getGithubGitAuthMode,
16
16
  getGithubPat
17
- } from "./chunk-GKKHXZCT.js";
17
+ } from "./chunk-BGQBELGJ.js";
18
18
  import {
19
19
  worktreesRoot
20
20
  } from "./chunk-BD2ICC4D.js";
@@ -1121,33 +1121,33 @@ function formatGitAuthModeDirective(mode) {
1121
1121
  "- `git` and `gh` already authenticate in this process. Do not look for tokens in the environment, paste credentials into commands, or switch remotes to SSH.",
1122
1122
  "- Do not set GitHub token environment variables, pass `--with-token`, or run `gh auth login` from this turn.",
1123
1123
  "- Push with `git push -u origin HEAD`. Create/update PRs with `gh` as below.",
1124
- "- If git/gh fail with auth errors, tell the user to run `gh auth login` on this Mac (or set a PAT in Account \u2192 GitHub). Do not wait for a Keychain dialog."
1124
+ "- If git/gh fail with auth errors, tell the user to run `gh auth login` on this Mac (or set a PAT in Settings \u2192 Git). Do not wait for a Keychain dialog."
1125
1125
  ];
1126
1126
  switch (mode) {
1127
1127
  case "gh":
1128
1128
  return [
1129
- "Git authentication (Account \u2192 GitHub mode: gh CLI):",
1129
+ "Git authentication (Settings \u2192 Git mode: gh CLI):",
1130
1130
  "- This process rewrites `git@github.com:` and `ssh://git@github.com/` to HTTPS.",
1131
1131
  ...shared
1132
1132
  ].join("\n");
1133
1133
  case "ssh":
1134
1134
  return [
1135
- "Git authentication (Account \u2192 GitHub mode: SSH):",
1135
+ "Git authentication (Settings \u2192 Git mode: SSH):",
1136
1136
  "- Keep SSH remotes (`git@github.com:\u2026`). Do not rewrite them to HTTPS.",
1137
- "- SSH is batch-mode: it will not prompt for a Keychain password. If push fails with `Permission denied (publickey)`, tell the user to unlock ssh-agent or switch Account \u2192 GitHub to Auto / gh CLI \u2014 do not rewrite remotes yourself.",
1137
+ "- SSH is batch-mode: it will not prompt for a Keychain password. If push fails with `Permission denied (publickey)`, tell the user to unlock ssh-agent or switch Settings \u2192 Git to Auto / gh CLI \u2014 do not rewrite remotes yourself.",
1138
1138
  "- `gh` already authenticates for PRs/API (no token in the environment). Do not set GitHub token environment variables or run `gh auth login` from this turn.",
1139
1139
  "- Push with `git push -u origin HEAD`. Create/update PRs with `gh` as below."
1140
1140
  ].join("\n");
1141
1141
  case "token":
1142
1142
  return [
1143
- "Git authentication (Account \u2192 GitHub mode: personal access token):",
1143
+ "Git authentication (Settings \u2192 Git mode: personal access token):",
1144
1144
  "- This process rewrites GitHub SSH remotes to HTTPS.",
1145
1145
  ...shared
1146
1146
  ].join("\n");
1147
1147
  case "auto":
1148
1148
  default:
1149
1149
  return [
1150
- "Git authentication (Account \u2192 GitHub mode: auto):",
1150
+ "Git authentication (Settings \u2192 Git mode: auto):",
1151
1151
  "- This process rewrites GitHub SSH remotes to HTTPS so git/ssh never prompt the macOS Keychain (required for unattended orchestrator turns).",
1152
1152
  ...shared
1153
1153
  ].join("\n");
File without changes
File without changes
File without changes
@@ -224,6 +224,18 @@ function normalizeVault(raw) {
224
224
  if (typeof raw.abletimeAccessToken === "string" && raw.abletimeAccessToken.trim()) {
225
225
  out.abletimeAccessToken = raw.abletimeAccessToken.trim();
226
226
  }
227
+ if (typeof raw.vercelToken === "string" && raw.vercelToken.trim()) {
228
+ out.vercelToken = raw.vercelToken.trim();
229
+ }
230
+ if (typeof raw.supabaseAccessToken === "string" && raw.supabaseAccessToken.trim()) {
231
+ out.supabaseAccessToken = raw.supabaseAccessToken.trim();
232
+ }
233
+ if (typeof raw.posthogPersonalApiKey === "string" && raw.posthogPersonalApiKey.trim()) {
234
+ out.posthogPersonalApiKey = raw.posthogPersonalApiKey.trim();
235
+ }
236
+ if (typeof raw.sentryAuthToken === "string" && raw.sentryAuthToken.trim()) {
237
+ out.sentryAuthToken = raw.sentryAuthToken.trim();
238
+ }
227
239
  if (raw.environment && typeof raw.environment === "object") {
228
240
  const environment = {};
229
241
  for (const [key, value] of Object.entries(raw.environment)) {
@@ -266,6 +278,20 @@ var DEFAULT_AGENTS = /* @__PURE__ */ new Set([
266
278
  "cursor"
267
279
  ]);
268
280
  var GITHUB_GIT_AUTH_MODES = ["auto", "gh", "ssh", "token"];
281
+ function emptyPublicIntegrations() {
282
+ return {
283
+ hasLinearApiKey: false,
284
+ hasLinearOAuth: false,
285
+ hasSlackClientSecret: false,
286
+ hasSlackAppToken: false,
287
+ hasGithubPat: false,
288
+ hasAbleTimeToken: false,
289
+ hasVercelToken: false,
290
+ hasSupabaseToken: false,
291
+ hasPosthogToken: false,
292
+ hasSentryToken: false
293
+ };
294
+ }
269
295
  function hasLinearOAuth(integrations) {
270
296
  return Boolean(
271
297
  integrations.linearAccessToken?.trim() || integrations.linearRefreshToken?.trim()
@@ -284,6 +310,10 @@ function toPublicAppSettings(settings) {
284
310
  const slackAppToken = integrations.slackAppToken;
285
311
  const githubPat = integrations.githubPat;
286
312
  const abletimeAccessToken = integrations.abletimeAccessToken;
313
+ const vercelToken = integrations.vercelToken;
314
+ const supabaseAccessToken = integrations.supabaseAccessToken;
315
+ const posthogPersonalApiKey = integrations.posthogPersonalApiKey;
316
+ const sentryAuthToken = integrations.sentryAuthToken;
287
317
  delete integrations.linearApiKey;
288
318
  delete integrations.linearAccessToken;
289
319
  delete integrations.linearRefreshToken;
@@ -292,6 +322,10 @@ function toPublicAppSettings(settings) {
292
322
  delete integrations.slackAppToken;
293
323
  delete integrations.githubPat;
294
324
  delete integrations.abletimeAccessToken;
325
+ delete integrations.vercelToken;
326
+ delete integrations.supabaseAccessToken;
327
+ delete integrations.posthogPersonalApiKey;
328
+ delete integrations.sentryAuthToken;
295
329
  return {
296
330
  ...settings,
297
331
  environment,
@@ -302,7 +336,11 @@ function toPublicAppSettings(settings) {
302
336
  hasSlackClientSecret: Boolean(slackClientSecret?.trim()),
303
337
  hasSlackAppToken: Boolean(slackAppToken?.trim()),
304
338
  hasGithubPat: Boolean(githubPat?.trim()),
305
- hasAbleTimeToken: Boolean(abletimeAccessToken?.trim())
339
+ hasAbleTimeToken: Boolean(abletimeAccessToken?.trim()),
340
+ hasVercelToken: Boolean(vercelToken?.trim()),
341
+ hasSupabaseToken: Boolean(supabaseAccessToken?.trim()),
342
+ hasPosthogToken: Boolean(posthogPersonalApiKey?.trim()),
343
+ hasSentryToken: Boolean(sentryAuthToken?.trim())
306
344
  }
307
345
  };
308
346
  }
@@ -445,6 +483,46 @@ function normalizeIntegrations(raw) {
445
483
  const name = source.abletimeViewerName.trim().slice(0, 120);
446
484
  if (name) out.abletimeViewerName = name;
447
485
  }
486
+ if (typeof source.vercelToken === "string") {
487
+ const token = source.vercelToken.trim();
488
+ if (token) out.vercelToken = token;
489
+ }
490
+ if (typeof source.vercelViewerName === "string") {
491
+ const name = source.vercelViewerName.trim().slice(0, 120);
492
+ if (name) out.vercelViewerName = name;
493
+ }
494
+ if (typeof source.supabaseAccessToken === "string") {
495
+ const token = source.supabaseAccessToken.trim();
496
+ if (token) out.supabaseAccessToken = token;
497
+ }
498
+ if (typeof source.supabaseViewerName === "string") {
499
+ const name = source.supabaseViewerName.trim().slice(0, 120);
500
+ if (name) out.supabaseViewerName = name;
501
+ }
502
+ if (typeof source.posthogPersonalApiKey === "string") {
503
+ const key = source.posthogPersonalApiKey.trim();
504
+ if (key) out.posthogPersonalApiKey = key;
505
+ }
506
+ if (typeof source.posthogHost === "string") {
507
+ const host = source.posthogHost.trim();
508
+ if (host) out.posthogHost = host;
509
+ }
510
+ if (typeof source.posthogViewerName === "string") {
511
+ const name = source.posthogViewerName.trim().slice(0, 120);
512
+ if (name) out.posthogViewerName = name;
513
+ }
514
+ if (typeof source.sentryAuthToken === "string") {
515
+ const token = source.sentryAuthToken.trim();
516
+ if (token) out.sentryAuthToken = token;
517
+ }
518
+ if (typeof source.sentryHost === "string") {
519
+ const host = source.sentryHost.trim();
520
+ if (host) out.sentryHost = host;
521
+ }
522
+ if (typeof source.sentryViewerName === "string") {
523
+ const name = source.sentryViewerName.trim().slice(0, 120);
524
+ if (name) out.sentryViewerName = name;
525
+ }
448
526
  return out;
449
527
  }
450
528
  function normalizeDefaults(raw) {
@@ -603,7 +681,7 @@ function readSettingsFile() {
603
681
  }
604
682
  function diskHoldsSecrets(disk) {
605
683
  return Boolean(
606
- disk.integrations.linearApiKey || disk.integrations.linearAccessToken || disk.integrations.linearRefreshToken || disk.integrations.linearClientSecret || disk.integrations.slackClientSecret || disk.integrations.slackAppToken || disk.integrations.githubPat || disk.integrations.abletimeAccessToken || Object.keys(disk.environment).length > 0
684
+ disk.integrations.linearApiKey || disk.integrations.linearAccessToken || disk.integrations.linearRefreshToken || disk.integrations.linearClientSecret || disk.integrations.slackClientSecret || disk.integrations.slackAppToken || disk.integrations.githubPat || disk.integrations.abletimeAccessToken || disk.integrations.vercelToken || disk.integrations.supabaseAccessToken || disk.integrations.posthogPersonalApiKey || disk.integrations.sentryAuthToken || Object.keys(disk.environment).length > 0
607
685
  );
608
686
  }
609
687
  function mergeVault(disk) {
@@ -634,6 +712,18 @@ function mergeVault(disk) {
634
712
  if (vault.abletimeAccessToken && !integrations.abletimeAccessToken) {
635
713
  integrations.abletimeAccessToken = vault.abletimeAccessToken;
636
714
  }
715
+ if (vault.vercelToken && !integrations.vercelToken) {
716
+ integrations.vercelToken = vault.vercelToken;
717
+ }
718
+ if (vault.supabaseAccessToken && !integrations.supabaseAccessToken) {
719
+ integrations.supabaseAccessToken = vault.supabaseAccessToken;
720
+ }
721
+ if (vault.posthogPersonalApiKey && !integrations.posthogPersonalApiKey) {
722
+ integrations.posthogPersonalApiKey = vault.posthogPersonalApiKey;
723
+ }
724
+ if (vault.sentryAuthToken && !integrations.sentryAuthToken) {
725
+ integrations.sentryAuthToken = vault.sentryAuthToken;
726
+ }
637
727
  return { ...disk, environment, integrations };
638
728
  }
639
729
  function persistSplit(settings) {
@@ -646,6 +736,10 @@ function persistSplit(settings) {
646
736
  const slackAppToken = integrations.slackAppToken;
647
737
  const githubPat = integrations.githubPat;
648
738
  const abletimeAccessToken = integrations.abletimeAccessToken;
739
+ const vercelToken = integrations.vercelToken;
740
+ const supabaseAccessToken = integrations.supabaseAccessToken;
741
+ const posthogPersonalApiKey = integrations.posthogPersonalApiKey;
742
+ const sentryAuthToken = integrations.sentryAuthToken;
649
743
  delete integrations.linearApiKey;
650
744
  delete integrations.linearAccessToken;
651
745
  delete integrations.linearRefreshToken;
@@ -654,6 +748,10 @@ function persistSplit(settings) {
654
748
  delete integrations.slackAppToken;
655
749
  delete integrations.githubPat;
656
750
  delete integrations.abletimeAccessToken;
751
+ delete integrations.vercelToken;
752
+ delete integrations.supabaseAccessToken;
753
+ delete integrations.posthogPersonalApiKey;
754
+ delete integrations.sentryAuthToken;
657
755
  writePrivateFile(
658
756
  appSettingsPath(),
659
757
  `${JSON.stringify({ ...settings, environment: {}, integrations }, null, 2)}
@@ -668,6 +766,10 @@ function persistSplit(settings) {
668
766
  slackAppToken,
669
767
  githubPat,
670
768
  abletimeAccessToken,
769
+ vercelToken,
770
+ supabaseAccessToken,
771
+ posthogPersonalApiKey,
772
+ sentryAuthToken,
671
773
  environment: settings.environment
672
774
  });
673
775
  }
@@ -869,6 +971,80 @@ function updateIntegrationsSettings(patch) {
869
971
  integrations.abletimeViewerName = patch.abletimeViewerName.trim().slice(0, 120);
870
972
  }
871
973
  }
974
+ if ("vercelToken" in patch) {
975
+ if (patch.vercelToken == null || patch.vercelToken.trim() === "") {
976
+ delete integrations.vercelToken;
977
+ delete integrations.vercelViewerName;
978
+ } else {
979
+ integrations.vercelToken = patch.vercelToken.trim();
980
+ }
981
+ }
982
+ if ("vercelViewerName" in patch) {
983
+ if (patch.vercelViewerName == null || patch.vercelViewerName.trim() === "") {
984
+ delete integrations.vercelViewerName;
985
+ } else {
986
+ integrations.vercelViewerName = patch.vercelViewerName.trim().slice(0, 120);
987
+ }
988
+ }
989
+ if ("supabaseAccessToken" in patch) {
990
+ if (patch.supabaseAccessToken == null || patch.supabaseAccessToken.trim() === "") {
991
+ delete integrations.supabaseAccessToken;
992
+ delete integrations.supabaseViewerName;
993
+ } else {
994
+ integrations.supabaseAccessToken = patch.supabaseAccessToken.trim();
995
+ }
996
+ }
997
+ if ("supabaseViewerName" in patch) {
998
+ if (patch.supabaseViewerName == null || patch.supabaseViewerName.trim() === "") {
999
+ delete integrations.supabaseViewerName;
1000
+ } else {
1001
+ integrations.supabaseViewerName = patch.supabaseViewerName.trim().slice(0, 120);
1002
+ }
1003
+ }
1004
+ if ("posthogPersonalApiKey" in patch) {
1005
+ if (patch.posthogPersonalApiKey == null || patch.posthogPersonalApiKey.trim() === "") {
1006
+ delete integrations.posthogPersonalApiKey;
1007
+ delete integrations.posthogViewerName;
1008
+ } else {
1009
+ integrations.posthogPersonalApiKey = patch.posthogPersonalApiKey.trim();
1010
+ }
1011
+ }
1012
+ if ("posthogHost" in patch) {
1013
+ if (patch.posthogHost == null || patch.posthogHost.trim() === "") {
1014
+ delete integrations.posthogHost;
1015
+ } else {
1016
+ integrations.posthogHost = patch.posthogHost.trim();
1017
+ }
1018
+ }
1019
+ if ("posthogViewerName" in patch) {
1020
+ if (patch.posthogViewerName == null || patch.posthogViewerName.trim() === "") {
1021
+ delete integrations.posthogViewerName;
1022
+ } else {
1023
+ integrations.posthogViewerName = patch.posthogViewerName.trim().slice(0, 120);
1024
+ }
1025
+ }
1026
+ if ("sentryAuthToken" in patch) {
1027
+ if (patch.sentryAuthToken == null || patch.sentryAuthToken.trim() === "") {
1028
+ delete integrations.sentryAuthToken;
1029
+ delete integrations.sentryViewerName;
1030
+ } else {
1031
+ integrations.sentryAuthToken = patch.sentryAuthToken.trim();
1032
+ }
1033
+ }
1034
+ if ("sentryHost" in patch) {
1035
+ if (patch.sentryHost == null || patch.sentryHost.trim() === "") {
1036
+ delete integrations.sentryHost;
1037
+ } else {
1038
+ integrations.sentryHost = patch.sentryHost.trim();
1039
+ }
1040
+ }
1041
+ if ("sentryViewerName" in patch) {
1042
+ if (patch.sentryViewerName == null || patch.sentryViewerName.trim() === "") {
1043
+ delete integrations.sentryViewerName;
1044
+ } else {
1045
+ integrations.sentryViewerName = patch.sentryViewerName.trim().slice(0, 120);
1046
+ }
1047
+ }
872
1048
  return saveAppSettings({ ...current, integrations });
873
1049
  }
874
1050
  function updateDefaultsSettings(patch) {
@@ -1226,8 +1402,30 @@ function applyAppEnvironment(target = process.env, settings = loadAppSettings())
1226
1402
  target[key] = value;
1227
1403
  }
1228
1404
  }
1405
+ applyOptionalServiceTokens(target, settings.integrations);
1229
1406
  return target;
1230
1407
  }
1408
+ function fillEnvGap(target, key, value) {
1409
+ const v = value?.trim();
1410
+ if (!key || !v) return;
1411
+ if (target[key] == null || target[key] === "") target[key] = v;
1412
+ }
1413
+ function applyOptionalServiceTokens(target, integrations) {
1414
+ fillEnvGap(target, "VERCEL_TOKEN", integrations.vercelToken);
1415
+ fillEnvGap(target, "SUPABASE_ACCESS_TOKEN", integrations.supabaseAccessToken);
1416
+ fillEnvGap(target, "POSTHOG_PERSONAL_API_KEY", integrations.posthogPersonalApiKey);
1417
+ fillEnvGap(
1418
+ target,
1419
+ "POSTHOG_HOST",
1420
+ integrations.posthogPersonalApiKey ? integrations.posthogHost || "https://us.posthog.com" : void 0
1421
+ );
1422
+ fillEnvGap(target, "SENTRY_AUTH_TOKEN", integrations.sentryAuthToken);
1423
+ fillEnvGap(
1424
+ target,
1425
+ "SENTRY_URL",
1426
+ integrations.sentryAuthToken ? integrations.sentryHost || "https://sentry.io" : void 0
1427
+ );
1428
+ }
1231
1429
  function childEnvWithAppSettings(extra) {
1232
1430
  const settings = loadAppSettings();
1233
1431
  const env = stripNestedElectronEnv({ ...process.env });
@@ -1257,6 +1455,7 @@ export {
1257
1455
  issueSourceLabel,
1258
1456
  HARNESS_ENV_KEYS,
1259
1457
  GITHUB_GIT_AUTH_MODES,
1458
+ emptyPublicIntegrations,
1260
1459
  toPublicAppSettings,
1261
1460
  appSettingsPath,
1262
1461
  claudeUserSettingsPath,
@@ -8,7 +8,7 @@ import {
8
8
  getAbleTimeHost,
9
9
  isAbleTimeConnected,
10
10
  saveAbleTimeConnection
11
- } from "./chunk-GKKHXZCT.js";
11
+ } from "./chunk-BGQBELGJ.js";
12
12
 
13
13
  // src/integrations/abletime-mcp.ts
14
14
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";