@sideboard-ai/core 0.1.292 → 0.1.294

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 (57) hide show
  1. package/dist/{abletime-VFKYNSJT.js → abletime-APP3DZ4P.js} +4 -4
  2. package/dist/{abletime-4WJUVE64.js → abletime-RYDAQ3FE.js} +4 -4
  3. package/dist/{abletime-oauth-ICMB2XV2.js → abletime-oauth-KTERKARA.js} +3 -3
  4. package/dist/{abletime-oauth-FW24YHYX.js → abletime-oauth-ZURGXSY6.js} +3 -3
  5. package/dist/{abletime-rest-OGWC7BC6.js → abletime-rest-4TVIWLZK.js} +3 -3
  6. package/dist/{abletime-rest-HFMRTUDT.js → abletime-rest-EUB6RW7K.js} +3 -3
  7. package/dist/agents/cursor-runner.cjs +329 -36
  8. package/dist/agents/cursor-runner.js +318 -17
  9. package/dist/{agents-XAKSP653.js → agents-2PDBDZPS.js} +5 -5
  10. package/dist/{agents-4BBCKITL.js → agents-73JXQXF2.js} +5 -5
  11. package/dist/{app-settings-EHMXHNG5.js → app-settings-2IH42VA5.js} +3 -1
  12. package/dist/{app-settings-MR2U6AXN.js → app-settings-3OQWRKOK.js} +3 -1
  13. package/dist/{chunk-3E4NOIXN.js → chunk-3D3GGL6X.js} +3 -3
  14. package/dist/{chunk-5HPMKLJ7.js → chunk-6SGYGYH7.js} +38 -14
  15. package/dist/{chunk-NXXQFLNQ.js → chunk-B42H6GJR.js} +2 -2
  16. package/dist/{chunk-G74TSBJ3.js → chunk-BJUHZSZQ.js} +4 -4
  17. package/dist/{chunk-MVZO7QZ2.js → chunk-BU6HH5VA.js} +4 -0
  18. package/dist/{chunk-QOUTSISS.js → chunk-BYAFYLLZ.js} +19 -19
  19. package/dist/{chunk-4VXWLY3L.js → chunk-CECZUHA5.js} +18 -18
  20. package/dist/{chunk-O4324MXE.js → chunk-E7G7RY6T.js} +3 -3
  21. package/dist/{chunk-NFPWLDCH.js → chunk-FAXOEKQR.js} +5 -5
  22. package/dist/{chunk-GU6DT6NO.js → chunk-HSF2RQSQ.js} +5 -5
  23. package/dist/{chunk-OH4EN323.js → chunk-ISEYRGMP.js} +2 -2
  24. package/dist/{chunk-VNCPRMIK.js → chunk-JEYJGQ33.js} +17 -11
  25. package/dist/{chunk-MYJYINTS.js → chunk-LZVWKJXY.js} +3 -3
  26. package/dist/{chunk-Y67TBJD5.js → chunk-MOP5L5QZ.js} +3 -3
  27. package/dist/{chunk-AF2DMY3K.js → chunk-QDDTVIWE.js} +13 -4
  28. package/dist/{chunk-B3BPLPKQ.js → chunk-R3R3ZDFC.js} +2 -2
  29. package/dist/{chunk-36J3IZBS.js → chunk-RSATPXU4.js} +4 -0
  30. package/dist/{chunk-AHH5USEA.js → chunk-SSETL5EX.js} +2 -2
  31. package/dist/{chunk-LUQ7MIVD.js → chunk-SVQTKVXH.js} +16 -11
  32. package/dist/{chunk-W2KZTDET.js → chunk-WZCPZVUC.js} +2 -2
  33. package/dist/{chunk-4BXRRHDC.js → chunk-XCXUVX7I.js} +12 -3
  34. package/dist/{chunk-V3BSO2O6.js → chunk-YEIPPZ5W.js} +3 -3
  35. package/dist/{chunk-GBAACE3C.js → chunk-YKO6HG74.js} +4 -4
  36. package/dist/{chunk-2IXKTAIT.js → chunk-ZEP6JIRF.js} +38 -14
  37. package/dist/{conductor-5MNGC25D.js → conductor-7DEMFEIO.js} +4 -4
  38. package/dist/{conductor-UFJXJPTF.js → conductor-ZQZTYXSX.js} +4 -4
  39. package/dist/{coordinator-prompt-5Q66Y5KW.js → coordinator-prompt-AROMFCP2.js} +3 -3
  40. package/dist/{coordinator-prompt-BYPEW6DE.js → coordinator-prompt-K6XHUG3N.js} +3 -3
  41. package/dist/{global-workspace-YKOYXSB2.js → global-workspace-4WAU4PAL.js} +3 -3
  42. package/dist/{global-workspace-BTH2YGDZ.js → global-workspace-PX4GUVLW.js} +3 -3
  43. package/dist/index.cjs +80 -24
  44. package/dist/index.d.cts +19 -5
  45. package/dist/index.d.ts +19 -5
  46. package/dist/index.js +32 -17
  47. package/dist/mcp/run-stdio.cjs +66 -24
  48. package/dist/mcp/run-stdio.js +15 -13
  49. package/dist/{optional-cli-FRUZSZ3U.js → optional-cli-JQVNSMSU.js} +3 -3
  50. package/dist/{optional-cli-6SW4OOX3.js → optional-cli-PZXDOVJJ.js} +4 -4
  51. package/dist/{orchestrator-EQSK2RMI.js → orchestrator-LIEGSQ6M.js} +8 -8
  52. package/dist/{orchestrator-GSOW3RPA.js → orchestrator-YNEEEP6O.js} +8 -8
  53. package/dist/{workspaces-ELO2YVTU.js → workspaces-MFU3IGAP.js} +3 -3
  54. package/dist/{workspaces-RFD6I4FM.js → workspaces-U7SSD27C.js} +3 -3
  55. package/dist/{worktree-ADVQ6X6C.js → worktree-2VSHRI72.js} +2 -2
  56. package/dist/{worktree-TN7DZDJZ.js → worktree-TQKASYPZ.js} +2 -2
  57. package/package.json +1 -1
@@ -1880,6 +1880,9 @@ function disconnectLinearConnection() {
1880
1880
  delete integrations.linearOrganizationName;
1881
1881
  return saveAppSettings({ ...current, integrations });
1882
1882
  }
1883
+ function isPosthogConnected(settings = loadAppSettings()) {
1884
+ return Boolean(settings.integrations.posthogPersonalApiKey?.trim());
1885
+ }
1883
1886
  function isAbleTimeConnected(settings = loadAppSettings()) {
1884
1887
  return Boolean(
1885
1888
  settings.integrations.abletimeAccessToken?.trim() || settings.integrations.abletimeRefreshToken?.trim()
@@ -2320,6 +2323,7 @@ export {
2320
2323
  isLinearConnected,
2321
2324
  saveLinearOAuth,
2322
2325
  disconnectLinearConnection,
2326
+ isPosthogConnected,
2323
2327
  isAbleTimeConnected,
2324
2328
  getAbleTimeAccessToken,
2325
2329
  getAbleTimeHost,
@@ -14,7 +14,7 @@ import {
14
14
  parseSessionQuotaResetAt,
15
15
  planModeTurnInstruction,
16
16
  resolveQuotaFallbackAgent
17
- } from "./chunk-VNCPRMIK.js";
17
+ } from "./chunk-JEYJGQ33.js";
18
18
  import {
19
19
  REVIEW_TAB_TITLE,
20
20
  applyWorktreePkgCacheEnv,
@@ -53,7 +53,7 @@ import {
53
53
  worktreeDevProcessKey,
54
54
  worktreeRunProcessKey,
55
55
  worktreeSetupProcessKey
56
- } from "./chunk-GBAACE3C.js";
56
+ } from "./chunk-YKO6HG74.js";
57
57
  import {
58
58
  applyAgentEvent,
59
59
  clipAgentEventForPaint,
@@ -75,7 +75,7 @@ import {
75
75
  import {
76
76
  formatOptionalServicesDirectiveForTurn,
77
77
  formatOptionalServicesReminderForTurn
78
- } from "./chunk-AF2DMY3K.js";
78
+ } from "./chunk-QDDTVIWE.js";
79
79
  import {
80
80
  SLACK_REPLY_FORMATTING,
81
81
  addWorkspace,
@@ -100,7 +100,7 @@ import {
100
100
  stageAbsolutePathsAsAttachments,
101
101
  stageBuffersAsAttachments,
102
102
  syncWorkspacesFromThreads
103
- } from "./chunk-V3BSO2O6.js";
103
+ } from "./chunk-YEIPPZ5W.js";
104
104
  import {
105
105
  addPrStackLayer,
106
106
  allocateTeamSlug,
@@ -142,7 +142,7 @@ import {
142
142
  resolveRepoRoot,
143
143
  switchWorktreeBranch,
144
144
  withRepoGitLock
145
- } from "./chunk-2IXKTAIT.js";
145
+ } from "./chunk-ZEP6JIRF.js";
146
146
  import {
147
147
  agentNicknameFromWorktreePath,
148
148
  appendMessage,
@@ -229,7 +229,7 @@ import {
229
229
  usageOnLimit,
230
230
  withTurnScopedCost,
231
231
  writeViewerContext
232
- } from "./chunk-36J3IZBS.js";
232
+ } from "./chunk-RSATPXU4.js";
233
233
  import {
234
234
  examplePrefixedBranch,
235
235
  sanitizeGitBranchPrefix
@@ -451,9 +451,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
451
451
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
452
452
  );
453
453
  }
454
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-YKOYXSB2.js");
454
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-4WAU4PAL.js");
455
455
  if (isGlobalThread2(thread)) {
456
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-5Q66Y5KW.js");
456
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-AROMFCP2.js");
457
457
  ensureGlobalCoordinatorCwd2(
458
458
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
459
459
  );
@@ -2570,7 +2570,7 @@ async function createThread(input, _onSetupLine) {
2570
2570
  });
2571
2571
  await requireAgent(resolved.agent);
2572
2572
  if (input.cowboy) {
2573
- const { cowboyModeEnabled } = await import("./app-settings-MR2U6AXN.js");
2573
+ const { cowboyModeEnabled } = await import("./app-settings-3OQWRKOK.js");
2574
2574
  if (!cowboyModeEnabled()) {
2575
2575
  throw new Error(
2576
2576
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -2629,7 +2629,7 @@ async function createThread(input, _onSetupLine) {
2629
2629
  let sourceIsFork = false;
2630
2630
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
2631
2631
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
2632
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-4WJUVE64.js");
2632
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-RYDAQ3FE.js");
2633
2633
  const task = await ensureAbleTimeTask({
2634
2634
  title: title?.trim() || "Untitled work",
2635
2635
  description: input.prompt?.trim() || void 0
@@ -2740,7 +2740,7 @@ async function createThread(input, _onSetupLine) {
2740
2740
  return readThread(thread.id) ?? thread;
2741
2741
  }
2742
2742
  async function listLinearIssues(agent, repoPath) {
2743
- const { getAdapter: getAdapter2 } = await import("./agents-4BBCKITL.js");
2743
+ const { getAdapter: getAdapter2 } = await import("./agents-73JXQXF2.js");
2744
2744
  await requireAgent(agent, { requireLinear: true });
2745
2745
  const adapter = getAdapter2(agent);
2746
2746
  if (!adapter.listLinearIssues) {
@@ -3251,7 +3251,7 @@ async function adoptThread(input) {
3251
3251
  messages: input.messages ?? []
3252
3252
  });
3253
3253
  writeThread(thread);
3254
- const { addWorkspace: addWorkspace2 } = await import("./workspaces-RFD6I4FM.js");
3254
+ const { addWorkspace: addWorkspace2 } = await import("./workspaces-U7SSD27C.js");
3255
3255
  await addWorkspace2(repoPath);
3256
3256
  const { ensureWorktreeSideboardIgnored } = await import("./worktree-exclude-RXZPTCNH.js");
3257
3257
  await ensureWorktreeSideboardIgnored(input.worktreePath);
@@ -6170,7 +6170,7 @@ function formatScheduledPrompt(name, prompt) {
6170
6170
  ${prompt}`;
6171
6171
  }
6172
6172
  async function defaultDeps() {
6173
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-GSOW3RPA.js");
6173
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-YNEEEP6O.js");
6174
6174
  const orch = getOrchestrator2();
6175
6175
  return {
6176
6176
  findThread: (id) => findThreadByRef(id),
@@ -6488,7 +6488,7 @@ var Orchestrator = class {
6488
6488
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
6489
6489
  });
6490
6490
  }
6491
- const { autoCleanupOrphansEnabled } = await import("./app-settings-MR2U6AXN.js");
6491
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-3OQWRKOK.js");
6492
6492
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
6493
6493
  await cleanupOrphanWorktrees({ repoPaths });
6494
6494
  }
@@ -6882,7 +6882,7 @@ var Orchestrator = class {
6882
6882
  }
6883
6883
  await setup;
6884
6884
  if (skipSetup) return;
6885
- const { autoRunAfterSetupEnabled } = await import("./app-settings-MR2U6AXN.js");
6885
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-3OQWRKOK.js");
6886
6886
  if (autoRunAfterSetupEnabled()) {
6887
6887
  try {
6888
6888
  await this.startDev(threadId);
@@ -7273,7 +7273,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
7273
7273
  }
7274
7274
  const isBrightsy = fresh.agent === "brightsy";
7275
7275
  const isOrchestration = isOrchestratorThread(fresh);
7276
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-MR2U6AXN.js");
7276
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-3OQWRKOK.js");
7277
7277
  const gitAuthMode = getGithubGitAuthMode();
7278
7278
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
7279
7279
  githubSlug: await withTimeout(
@@ -8589,7 +8589,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8589
8589
  if (Object.keys(patch).length === 0) continue;
8590
8590
  updateThread(t.id, patch);
8591
8591
  }
8592
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-MR2U6AXN.js");
8592
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-3OQWRKOK.js");
8593
8593
  const latest = this.requireThread(thread.id);
8594
8594
  if (!shouldAutoArchiveOnPrMerge({
8595
8595
  previousPrState: prevState || null,
@@ -8906,7 +8906,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8906
8906
  await runArchiveScript(thread.repoPath, thread.worktreePath);
8907
8907
  } catch {
8908
8908
  }
8909
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-MR2U6AXN.js");
8909
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-3OQWRKOK.js");
8910
8910
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
8911
8911
  await removeWorktree(thread.repoPath, thread.worktreePath, {
8912
8912
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -9042,7 +9042,7 @@ async function startOrchestration(opts) {
9042
9042
  sourceRef: "default",
9043
9043
  ...createOpts
9044
9044
  }).catch(async () => {
9045
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-TN7DZDJZ.js");
9045
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-TQKASYPZ.js");
9046
9046
  const repo = await resolveRepoRoot2(repoPath);
9047
9047
  const def = await resolveDefaultBranch2(repo);
9048
9048
  return orch.createThread({
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  formatOptionalServicesDirectiveForTurn,
8
8
  formatOptionalServicesReminderForTurn
9
- } from "./chunk-4BXRRHDC.js";
9
+ } from "./chunk-XCXUVX7I.js";
10
10
  import {
11
11
  extractPresentedPlan,
12
12
  isPresentPlanToolName,
@@ -27,7 +27,7 @@ import {
27
27
  parseSessionQuotaResetAt,
28
28
  planModeTurnInstruction,
29
29
  resolveQuotaFallbackAgent
30
- } from "./chunk-LUQ7MIVD.js";
30
+ } from "./chunk-SVQTKVXH.js";
31
31
  import {
32
32
  REVIEW_TAB_TITLE,
33
33
  applyWorktreePkgCacheEnv,
@@ -66,7 +66,7 @@ import {
66
66
  worktreeDevProcessKey,
67
67
  worktreeRunProcessKey,
68
68
  worktreeSetupProcessKey
69
- } from "./chunk-G74TSBJ3.js";
69
+ } from "./chunk-BJUHZSZQ.js";
70
70
  import {
71
71
  applyAgentEvent,
72
72
  clipAgentEventForPaint,
@@ -118,7 +118,7 @@ import {
118
118
  stageAbsolutePathsAsAttachments,
119
119
  stageBuffersAsAttachments,
120
120
  syncWorkspacesFromThreads
121
- } from "./chunk-O4324MXE.js";
121
+ } from "./chunk-E7G7RY6T.js";
122
122
  import {
123
123
  addPrStackLayer,
124
124
  allocateTeamSlug,
@@ -160,7 +160,7 @@ import {
160
160
  resolveRepoRoot,
161
161
  switchWorktreeBranch,
162
162
  withRepoGitLock
163
- } from "./chunk-5HPMKLJ7.js";
163
+ } from "./chunk-6SGYGYH7.js";
164
164
  import {
165
165
  clearStaleIndexLocks,
166
166
  enrichPathWithNpmGlobalBin,
@@ -201,7 +201,7 @@ import {
201
201
  usageOnLimit,
202
202
  withTurnScopedCost,
203
203
  writeViewerContext
204
- } from "./chunk-MVZO7QZ2.js";
204
+ } from "./chunk-BU6HH5VA.js";
205
205
  import {
206
206
  writePrivateFile
207
207
  } from "./chunk-NSTQ6QKD.js";
@@ -503,9 +503,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
503
503
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
504
504
  );
505
505
  }
506
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-BTH2YGDZ.js");
506
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-PX4GUVLW.js");
507
507
  if (isGlobalThread2(thread)) {
508
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-BYPEW6DE.js");
508
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-K6XHUG3N.js");
509
509
  ensureGlobalCoordinatorCwd2(
510
510
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
511
511
  );
@@ -2453,7 +2453,7 @@ async function createThread(input, _onSetupLine) {
2453
2453
  });
2454
2454
  await requireAgent(resolved.agent);
2455
2455
  if (input.cowboy) {
2456
- const { cowboyModeEnabled } = await import("./app-settings-EHMXHNG5.js");
2456
+ const { cowboyModeEnabled } = await import("./app-settings-2IH42VA5.js");
2457
2457
  if (!cowboyModeEnabled()) {
2458
2458
  throw new Error(
2459
2459
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -2512,7 +2512,7 @@ async function createThread(input, _onSetupLine) {
2512
2512
  let sourceIsFork = false;
2513
2513
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
2514
2514
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
2515
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-VFKYNSJT.js");
2515
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-APP3DZ4P.js");
2516
2516
  const task = await ensureAbleTimeTask({
2517
2517
  title: title?.trim() || "Untitled work",
2518
2518
  description: input.prompt?.trim() || void 0
@@ -3119,7 +3119,7 @@ async function adoptThread(input) {
3119
3119
  messages: input.messages ?? []
3120
3120
  });
3121
3121
  writeThread(thread);
3122
- const { addWorkspace: addWorkspace2 } = await import("./workspaces-ELO2YVTU.js");
3122
+ const { addWorkspace: addWorkspace2 } = await import("./workspaces-MFU3IGAP.js");
3123
3123
  await addWorkspace2(repoPath);
3124
3124
  const { ensureWorktreeSideboardIgnored } = await import("./worktree-exclude-5N2KTYIT.js");
3125
3125
  await ensureWorktreeSideboardIgnored(input.worktreePath);
@@ -5994,7 +5994,7 @@ function formatScheduledPrompt(name, prompt) {
5994
5994
  ${prompt}`;
5995
5995
  }
5996
5996
  async function defaultDeps() {
5997
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-EQSK2RMI.js");
5997
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-LIEGSQ6M.js");
5998
5998
  const orch = getOrchestrator2();
5999
5999
  return {
6000
6000
  findThread: (id) => findThreadByRef(id),
@@ -6312,7 +6312,7 @@ var Orchestrator = class {
6312
6312
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
6313
6313
  });
6314
6314
  }
6315
- const { autoCleanupOrphansEnabled } = await import("./app-settings-EHMXHNG5.js");
6315
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-2IH42VA5.js");
6316
6316
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
6317
6317
  await cleanupOrphanWorktrees({ repoPaths });
6318
6318
  }
@@ -6706,7 +6706,7 @@ var Orchestrator = class {
6706
6706
  }
6707
6707
  await setup;
6708
6708
  if (skipSetup) return;
6709
- const { autoRunAfterSetupEnabled } = await import("./app-settings-EHMXHNG5.js");
6709
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-2IH42VA5.js");
6710
6710
  if (autoRunAfterSetupEnabled()) {
6711
6711
  try {
6712
6712
  await this.startDev(threadId);
@@ -7097,7 +7097,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
7097
7097
  }
7098
7098
  const isBrightsy = fresh.agent === "brightsy";
7099
7099
  const isOrchestration = isOrchestratorThread(fresh);
7100
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-EHMXHNG5.js");
7100
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-2IH42VA5.js");
7101
7101
  const gitAuthMode = getGithubGitAuthMode();
7102
7102
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
7103
7103
  githubSlug: await withTimeout(
@@ -8413,7 +8413,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8413
8413
  if (Object.keys(patch).length === 0) continue;
8414
8414
  updateThread(t.id, patch);
8415
8415
  }
8416
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-EHMXHNG5.js");
8416
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-2IH42VA5.js");
8417
8417
  const latest = this.requireThread(thread.id);
8418
8418
  if (!shouldAutoArchiveOnPrMerge({
8419
8419
  previousPrState: prevState || null,
@@ -8730,7 +8730,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8730
8730
  await runArchiveScript(thread.repoPath, thread.worktreePath);
8731
8731
  } catch {
8732
8732
  }
8733
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-EHMXHNG5.js");
8733
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-2IH42VA5.js");
8734
8734
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
8735
8735
  await removeWorktree(thread.repoPath, thread.worktreePath, {
8736
8736
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -8866,7 +8866,7 @@ async function startOrchestration(opts) {
8866
8866
  sourceRef: "default",
8867
8867
  ...createOpts
8868
8868
  }).catch(async () => {
8869
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-ADVQ6X6C.js");
8869
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-2VSHRI72.js");
8870
8870
  const repo = await resolveRepoRoot2(repoPath);
8871
8871
  const def = await resolveDefaultBranch2(repo);
8872
8872
  return orch.createThread({
@@ -5,7 +5,7 @@ import {
5
5
  ensureGhPreferOrigin,
6
6
  resolveGithubRepoSlug,
7
7
  resolveRepoRoot
8
- } from "./chunk-5HPMKLJ7.js";
8
+ } from "./chunk-6SGYGYH7.js";
9
9
  import {
10
10
  ATTACHMENTS_DIR,
11
11
  attachmentsGitignoreBody
@@ -22,7 +22,7 @@ import {
22
22
  resolveThreadDefaults,
23
23
  resolveViewerProfile,
24
24
  resolveViewerProfileForRepo
25
- } from "./chunk-MVZO7QZ2.js";
25
+ } from "./chunk-BU6HH5VA.js";
26
26
  import {
27
27
  allocateTeamName,
28
28
  createEmptyThread,
@@ -346,7 +346,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
346
346
  "- linear_* (when Linear is connected) \u2014 list_teams for team key/states; linear_list_projects for project names; get/search include the project a ticket is on; get/create/update/comment with ENG-123. Worktree agents have the same Account tools \u2014 prefer they comment, update status, and create spin-offs (parent=) on their own ticket when they were asked to do the work. When reviewing a PR or ticket, do not comment or update until the user types a next step \u2014 they should work through the feedback in chat first. Do not tell the child to ask_user after the review. Scope errors: reconnect Linear in Account settings. Prefer these over any Linear MCP the CLI may still list.",
347
347
  "- github_* \u2014 get/comment/update/create GitHub issues via Account `gh` (#123). github_list_projects and get/search include GitHub Projects. projectsError or a missing read:project scope \u2192 `gh auth refresh -s read:project`. Worktree agents have these too. Prefer over any vendor GitHub MCP. Pass parent= for spin-offs. When reviewing a PR or ticket, do not comment, submit `gh pr review`, or update the PR/ticket until the user types a next step.",
348
348
  "- abletime_* (when AbleTime is connected) \u2014 orientation first; abletime_list_projects lists projects; get/list include the project a task is on; get/comment/update/create (parent= for spin-offs); ensure_task when work has no ticket (or create_workspace from the default branch auto-creates one). Worktree agents have the same Account tools. Same review-write gate as Linear/GitHub.",
349
- "- Optional connectors (Vercel, Supabase, Sentry) in Settings \u2192 Connectors inject tokens into worktree agent env when connected. Prefer official CLIs (`vercel`, `supabase`, `sentry-cli`). PostHog is the Sideboard tool `posthog_api` (GET by default; POST `/api/projects/:id/query/` or `/api/environments/:id/query/` is a read and does not need write=true; other POST and PATCH need write=true only when the user asked to change data). The PostHog key stays in the vault \u2014 do not read it from the environment. If a connector MCP needsAuth or is unauthorized, do not sign in \u2014 use the native CLI or `posthog_api`. Tell any worktree agent (Claude / Cursor / Codex / OpenCode) to write CLI output to `.context/cli/` and read a slice. If a CLI is missing, the user presses Install CLI on that row. Do not add vendor MCPs. Git (`gh`) stays Settings \u2192 Git; issue tracking stays Settings \u2192 Issues. The phone remote is Settings \u2192 Remote \u2014 do not look up Slack users.",
349
+ "- Optional connectors (Vercel, Supabase, Sentry) in Settings \u2192 Connectors inject tokens into worktree agent env when connected. Prefer official CLIs (`vercel`, `supabase`, `sentry-cli`). When Settings \u2192 Connectors has a PostHog personal API key, PostHog is the Sideboard tool `posthog_api` (GET by default; POST `/api/projects/:id/query/` or `/api/environments/:id/query/` is a read and does not need write=true; other POST and PATCH need write=true only when the user asked to change data). The PostHog key stays in the vault \u2014 do not read it from the environment, and do not sign in to a PostHog MCP. When no PostHog API key is set, leave the Claude PostHog connector alone. If a Vercel, Supabase, or Sentry MCP needsAuth or is unauthorized, do not sign in \u2014 use the native CLI. Tell any worktree agent (Claude / Cursor / Codex / OpenCode) to write CLI output to `.context/cli/` and read a slice. If a CLI is missing, the user presses Install CLI on that row. Do not add vendor MCPs. Git (`gh`) stays Settings \u2192 Git; issue tracking stays Settings \u2192 Issues. The phone remote is Settings \u2192 Remote \u2014 do not look up Slack users.",
350
350
  "- get_pr_stack / open_pr_stack_layers / add_stack_layer / create_pr_stack \u2014 GitHub stacked PRs (`gh stack`); one worktree per layer",
351
351
  "- list_models \u2014 only when you need a specific model (rare); otherwise omit model so Account defaults apply",
352
352
  "- list_chats / get_chat \u2014 live thread list (parent id + last message preview). get_chat on this orchestration chat lists child worktree agents (status + lastText). blockedReason is why that agent is waiting on a person. Also includes usage / lastTurnUsage.",
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getAbleTimeHost,
6
6
  isAbleTimeConnected
7
- } from "./chunk-36J3IZBS.js";
7
+ } from "./chunk-RSATPXU4.js";
8
8
 
9
9
  // src/integrations/abletime-mcp.ts
10
10
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -153,7 +153,7 @@ function textsFromUnknown(value) {
153
153
  return "";
154
154
  }
155
155
  async function abletimeMcpRequest(method, params, opts) {
156
- const rawToken = opts?.token ?? await import("./abletime-oauth-ICMB2XV2.js").then((m) => m.ensureAbleTimeAccessToken());
156
+ const rawToken = opts?.token ?? await import("./abletime-oauth-KTERKARA.js").then((m) => m.ensureAbleTimeAccessToken());
157
157
  if (!rawToken?.trim()) {
158
158
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
159
159
  }
@@ -224,9 +224,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
224
224
  if (!opts?.token && !isAbleTimeConnected()) {
225
225
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
226
226
  }
227
- const rawToken = opts?.token ?? await import("./abletime-oauth-ICMB2XV2.js").then((m) => m.ensureAbleTimeAccessToken());
227
+ const rawToken = opts?.token ?? await import("./abletime-oauth-KTERKARA.js").then((m) => m.ensureAbleTimeAccessToken());
228
228
  if (rawToken && ableTimeUsesRest(rawToken)) {
229
- const { callAbleTimeRestTool } = await import("./abletime-rest-HFMRTUDT.js");
229
+ const { callAbleTimeRestTool } = await import("./abletime-rest-EUB6RW7K.js");
230
230
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
231
231
  }
232
232
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -242,7 +242,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
242
242
  return await call();
243
243
  }
244
244
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
245
- const { callAbleTimeRestTool } = await import("./abletime-rest-HFMRTUDT.js");
245
+ const { callAbleTimeRestTool } = await import("./abletime-rest-EUB6RW7K.js");
246
246
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
247
247
  }
248
248
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  getAbleTimeHost,
8
8
  isAbleTimeConnected
9
- } from "./chunk-MVZO7QZ2.js";
9
+ } from "./chunk-BU6HH5VA.js";
10
10
 
11
11
  // src/integrations/abletime-mcp.ts
12
12
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -155,7 +155,7 @@ function textsFromUnknown(value) {
155
155
  return "";
156
156
  }
157
157
  async function abletimeMcpRequest(method, params, opts) {
158
- const rawToken = opts?.token ?? await import("./abletime-oauth-FW24YHYX.js").then((m) => m.ensureAbleTimeAccessToken());
158
+ const rawToken = opts?.token ?? await import("./abletime-oauth-ZURGXSY6.js").then((m) => m.ensureAbleTimeAccessToken());
159
159
  if (!rawToken?.trim()) {
160
160
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
161
161
  }
@@ -226,9 +226,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
226
226
  if (!opts?.token && !isAbleTimeConnected()) {
227
227
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
228
228
  }
229
- const rawToken = opts?.token ?? await import("./abletime-oauth-FW24YHYX.js").then((m) => m.ensureAbleTimeAccessToken());
229
+ const rawToken = opts?.token ?? await import("./abletime-oauth-ZURGXSY6.js").then((m) => m.ensureAbleTimeAccessToken());
230
230
  if (rawToken && ableTimeUsesRest(rawToken)) {
231
- const { callAbleTimeRestTool } = await import("./abletime-rest-OGWC7BC6.js");
231
+ const { callAbleTimeRestTool } = await import("./abletime-rest-4TVIWLZK.js");
232
232
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
233
233
  }
234
234
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -244,7 +244,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
244
244
  return await call();
245
245
  }
246
246
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
247
- const { callAbleTimeRestTool } = await import("./abletime-rest-OGWC7BC6.js");
247
+ const { callAbleTimeRestTool } = await import("./abletime-rest-4TVIWLZK.js");
248
248
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
249
249
  }
250
250
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -2,11 +2,11 @@ import {
2
2
  OPTIONAL_SERVICES,
3
3
  isOptionalServiceId,
4
4
  optionalServiceSpec
5
- } from "./chunk-AF2DMY3K.js";
5
+ } from "./chunk-QDDTVIWE.js";
6
6
  import {
7
7
  installNpmGlobalPackage,
8
8
  whichOnPath
9
- } from "./chunk-NXXQFLNQ.js";
9
+ } from "./chunk-B42H6GJR.js";
10
10
  import {
11
11
  enrichPathWithNpmGlobalBin
12
12
  } from "./chunk-QVN2WOKJ.js";
@@ -12,13 +12,13 @@ import {
12
12
  } from "./chunk-YSLCWCMJ.js";
13
13
  import {
14
14
  isOrchestratorThread
15
- } from "./chunk-V3BSO2O6.js";
15
+ } from "./chunk-YEIPPZ5W.js";
16
16
  import {
17
17
  codexUnattendedGitConfigArgs,
18
18
  mergeAgentGitAuthEnv,
19
19
  resolveAgentGitAuthEnv,
20
20
  resolveCodexGitWritableRoots
21
- } from "./chunk-2IXKTAIT.js";
21
+ } from "./chunk-ZEP6JIRF.js";
22
22
  import {
23
23
  loadBrightsyConfig
24
24
  } from "./chunk-33KDPEK4.js";
@@ -64,10 +64,11 @@ import {
64
64
  fromInclusiveInputUsage,
65
65
  isAbleTimeConnected,
66
66
  isLinearConnected,
67
+ isPosthogConnected,
67
68
  loadAppSettings,
68
69
  resolveAgentExecutable,
69
70
  resolveClaudeExecutable
70
- } from "./chunk-36J3IZBS.js";
71
+ } from "./chunk-RSATPXU4.js";
71
72
  import {
72
73
  isElectronLikeCommand,
73
74
  unwrapStrippedElectronLaunch
@@ -574,6 +575,10 @@ var CLAUDE_CHROME_ALLOWED_TOOLS = [
574
575
  "mcp__claude-in-chrome__*",
575
576
  "Skill(claude-in-chrome)"
576
577
  ];
578
+ var CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS = [
579
+ "mcp__claude_ai_PostHog",
580
+ "mcp__claude_ai_PostHog__*"
581
+ ];
577
582
 
578
583
  // src/agents/orch-mcp-isolation.ts
579
584
  import { existsSync as existsSync4, readFileSync as readFileSync2 } from "fs";
@@ -719,11 +724,9 @@ var SIDEBOARD_GITHUB_MCP_ALLOWED_TOOLS = ["mcp__sideboard__github_*"];
719
724
  var SIDEBOARD_LINEAR_MCP_ALLOWED_TOOLS = ["mcp__sideboard__linear_*"];
720
725
  var SIDEBOARD_ABLETIME_MCP_ALLOWED_TOOLS = ["mcp__sideboard__abletime_*"];
721
726
  function sideboardWorktreeAllowedTools(opts) {
722
- const out = [...SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS];
723
- if (!opts?.planMode) {
724
- const idx = out.indexOf("mcp__sideboard__present_plan");
725
- if (idx >= 0) out.splice(idx, 1);
726
- }
727
+ const out = SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS.filter(
728
+ (tool) => (opts?.planMode || tool !== "mcp__sideboard__present_plan") && (opts?.posthog || tool !== "mcp__sideboard__posthog_api")
729
+ );
727
730
  if (opts?.github !== false) out.push(...SIDEBOARD_GITHUB_MCP_ALLOWED_TOOLS);
728
731
  if (opts?.linear) out.push(...SIDEBOARD_LINEAR_MCP_ALLOWED_TOOLS);
729
732
  if (opts?.abletime) out.push(...SIDEBOARD_ABLETIME_MCP_ALLOWED_TOOLS);
@@ -1752,7 +1755,7 @@ var claudeAdapter = {
1752
1755
  );
1753
1756
  }
1754
1757
  const mode = permissionMode(thread);
1755
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-YKOYXSB2.js");
1758
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-4WAU4PAL.js");
1756
1759
  const isOrchestrator = isOrchestratorThread2(thread);
1757
1760
  const rpc = worktreeAgentRpc(isOrchestrator);
1758
1761
  const injectedServers = await buildInjectedMcpServers({
@@ -1782,9 +1785,11 @@ var claudeAdapter = {
1782
1785
  github: true,
1783
1786
  linear: isLinearConnected(),
1784
1787
  abletime: isAbleTimeConnected(),
1785
- planMode: thread.planMode
1788
+ planMode: thread.planMode,
1789
+ posthog: isPosthogConnected()
1786
1790
  }),
1787
- ...brightsyMcpAllowedTools(injectedBrightsyNames)
1791
+ ...brightsyMcpAllowedTools(injectedBrightsyNames),
1792
+ ...isPosthogConnected() ? [] : CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS
1788
1793
  ];
1789
1794
  }
1790
1795
  if (chromeOn) {
@@ -3683,6 +3688,7 @@ export {
3683
3688
  BASE_ALLOWED_TOOLS,
3684
3689
  CLAUDE_PRINT_BG_WAIT_CEILING_MS,
3685
3690
  CLAUDE_CHROME_ALLOWED_TOOLS,
3691
+ CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS,
3686
3692
  SIDEBOARD_MCP_PROFILE_ENV,
3687
3693
  SIDEBOARD_THREAD_ID_ENV,
3688
3694
  shouldRegisterMcpWaitForTurn,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  abletimeRestUrl,
3
3
  textFromAbleTimeDoc
4
- } from "./chunk-B3BPLPKQ.js";
4
+ } from "./chunk-R3R3ZDFC.js";
5
5
  import {
6
6
  assertAbleTimeCredential,
7
7
  callAbleTimeTool,
8
8
  normalizeAbleTimeHost,
9
9
  rewriteAbleTimeError
10
- } from "./chunk-NFPWLDCH.js";
10
+ } from "./chunk-FAXOEKQR.js";
11
11
  import {
12
12
  httpFetch
13
13
  } from "./chunk-JAT3JFOS.js";
@@ -20,7 +20,7 @@ import {
20
20
  getAbleTimeHost,
21
21
  isAbleTimeConnected,
22
22
  saveAbleTimeConnection
23
- } from "./chunk-36J3IZBS.js";
23
+ } from "./chunk-RSATPXU4.js";
24
24
 
25
25
  // src/integrations/issue-attachments.ts
26
26
  import { existsSync, mkdirSync, writeFileSync } from "fs";
@@ -3,13 +3,13 @@
3
3
  import {
4
4
  abletimeRestUrl,
5
5
  textFromAbleTimeDoc
6
- } from "./chunk-AHH5USEA.js";
6
+ } from "./chunk-SSETL5EX.js";
7
7
  import {
8
8
  assertAbleTimeCredential,
9
9
  callAbleTimeTool,
10
10
  normalizeAbleTimeHost,
11
11
  rewriteAbleTimeError
12
- } from "./chunk-GU6DT6NO.js";
12
+ } from "./chunk-HSF2RQSQ.js";
13
13
  import {
14
14
  httpFetch
15
15
  } from "./chunk-2GPQZZLY.js";
@@ -22,7 +22,7 @@ import {
22
22
  getAbleTimeHost,
23
23
  isAbleTimeConnected,
24
24
  saveAbleTimeConnection
25
- } from "./chunk-MVZO7QZ2.js";
25
+ } from "./chunk-BU6HH5VA.js";
26
26
 
27
27
  // src/integrations/issue-attachments.ts
28
28
  import { existsSync, mkdirSync, writeFileSync } from "fs";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  loadAppSettings,
6
6
  saveAppSettings
7
- } from "./chunk-36J3IZBS.js";
7
+ } from "./chunk-RSATPXU4.js";
8
8
 
9
9
  // src/integrations/optional-services.ts
10
10
  var OPTIONAL_SERVICE_IDS = ["vercel", "supabase", "posthog", "sentry"];
@@ -235,6 +235,12 @@ function connectorDirectiveLine(spec, cli) {
235
235
  }
236
236
  return `- ${spec.label}: call \`posthog_api\`. Path must start with \`/api/\`. GET is the default. POST \`/api/projects/:id/query/\` or \`/api/environments/:id/query/\` is a read and does not need \`write=true\`. Other POST and PATCH require \`write=true\` only when the user asked to change data. Do not read the API key from the environment. Do not add a ${spec.label} MCP.`;
237
237
  }
238
+ function connectorAuthCaution(posthog, cliConnected) {
239
+ const signIn = posthog ? "If a connector MCP is listed but needsAuth or returns unauthorized, do not sign in to that MCP." : "If a Vercel, Supabase, or Sentry MCP is listed but needsAuth or returns unauthorized, do not sign in to that MCP.";
240
+ const token = cliConnected ? " CLI tokens are already in this process." : "";
241
+ const key = posthog ? " Do not read a PostHog key from the environment." : "";
242
+ return `${signIn}${token}${key}`;
243
+ }
238
244
  function connectorReminderBit(spec, cli) {
239
245
  if (!spec.cli) return `${spec.label}: \`posthog_api\``;
240
246
  const presence = cliPresencePhrase(spec, cli);
@@ -244,10 +250,11 @@ function formatOptionalServicesDirective(integrations, cli) {
244
250
  const connected = connectedOptionalServices(integrations);
245
251
  if (connected.length === 0) return null;
246
252
  const cliConnected = connected.some((spec) => spec.cli);
253
+ const posthog = connected.some((spec) => spec.id === "posthog");
247
254
  const lines = [
248
255
  cliConnected ? "Optional connectors (connected \u2014 CLI tokens are already in this process env):" : "Optional connectors (connected):",
249
256
  ...connected.map((spec) => connectorDirectiveLine(spec, cli)),
250
- cliConnected ? "If a connector MCP is listed but needsAuth or returns unauthorized, do not sign in to that MCP. CLI tokens are already in this process. Do not read a PostHog key from the environment." : "If a connector MCP is listed but needsAuth or returns unauthorized, do not sign in to that MCP. Do not read a PostHog key from the environment.",
257
+ connectorAuthCaution(posthog, cliConnected),
251
258
  "Do not add a vendor MCP. When a binary is missing, ask the user to press Install CLI in Settings \u2192 Connectors.",
252
259
  "When you shell a connector CLI, write bulky output to `.context/cli/` and read a slice."
253
260
  ];
@@ -258,13 +265,15 @@ function formatOptionalServicesReminder(integrations, cli) {
258
265
  if (connected.length === 0) return null;
259
266
  const bits = connected.map((spec) => connectorReminderBit(spec, cli)).join(". ");
260
267
  const tokenBit = connected.some((spec) => spec.cli) ? "CLI tokens are already in this process. " : "";
261
- return `Settings \u2192 Connectors: ${tokenBit}${bits}. If a connector MCP needsAuth or is unauthorized, ignore it and use the CLI or \`posthog_api\`. Do not add vendor MCPs. Do not read a PostHog key from the environment. Shell dumps from those CLIs go in \`.context/cli/\` \u2014 read a slice.`;
268
+ const posthog = connected.some((spec) => spec.id === "posthog");
269
+ const auth = posthog ? "If a connector MCP needsAuth or is unauthorized, ignore it and use the CLI or `posthog_api`. Do not read a PostHog key from the environment." : "If a Vercel, Supabase, or Sentry MCP needsAuth or is unauthorized, ignore it and use the CLI.";
270
+ return `Settings \u2192 Connectors: ${tokenBit}${bits}. ${auth} Do not add vendor MCPs. Shell dumps from those CLIs go in \`.context/cli/\` \u2014 read a slice.`;
262
271
  }
263
272
  async function connectedCliPresence(integrations) {
264
273
  const ids = connectedOptionalServices(integrations).filter((spec) => spec.cli).map((spec) => spec.id);
265
274
  if (ids.length === 0) return void 0;
266
275
  try {
267
- const { optionalCliPresence } = await import("./optional-cli-6SW4OOX3.js");
276
+ const { optionalCliPresence } = await import("./optional-cli-PZXDOVJJ.js");
268
277
  return await optionalCliPresence(ids);
269
278
  } catch {
270
279
  return void 0;