@sideboard-ai/core 0.1.293 → 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 (55) 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-WT72O5A3.js → agents-2PDBDZPS.js} +5 -5
  8. package/dist/{agents-SITR5V6F.js → agents-73JXQXF2.js} +5 -5
  9. package/dist/{app-settings-EHMXHNG5.js → app-settings-2IH42VA5.js} +3 -1
  10. package/dist/{app-settings-MR2U6AXN.js → app-settings-3OQWRKOK.js} +3 -1
  11. package/dist/{chunk-3E4NOIXN.js → chunk-3D3GGL6X.js} +3 -3
  12. package/dist/{chunk-UO5C2L2G.js → chunk-6SGYGYH7.js} +1 -1
  13. package/dist/{chunk-NXXQFLNQ.js → chunk-B42H6GJR.js} +2 -2
  14. package/dist/{chunk-WRDKJRWF.js → chunk-BJUHZSZQ.js} +4 -4
  15. package/dist/{chunk-MVZO7QZ2.js → chunk-BU6HH5VA.js} +4 -0
  16. package/dist/{chunk-LSHGJI4S.js → chunk-BYAFYLLZ.js} +19 -19
  17. package/dist/{chunk-IP5WSADC.js → chunk-CECZUHA5.js} +18 -18
  18. package/dist/{chunk-PO3PDNMV.js → chunk-E7G7RY6T.js} +3 -3
  19. package/dist/{chunk-NFPWLDCH.js → chunk-FAXOEKQR.js} +5 -5
  20. package/dist/{chunk-GU6DT6NO.js → chunk-HSF2RQSQ.js} +5 -5
  21. package/dist/{chunk-OH4EN323.js → chunk-ISEYRGMP.js} +2 -2
  22. package/dist/{chunk-XZW3BXZW.js → chunk-JEYJGQ33.js} +17 -11
  23. package/dist/{chunk-MYJYINTS.js → chunk-LZVWKJXY.js} +3 -3
  24. package/dist/{chunk-Y67TBJD5.js → chunk-MOP5L5QZ.js} +3 -3
  25. package/dist/{chunk-AF2DMY3K.js → chunk-QDDTVIWE.js} +13 -4
  26. package/dist/{chunk-B3BPLPKQ.js → chunk-R3R3ZDFC.js} +2 -2
  27. package/dist/{chunk-36J3IZBS.js → chunk-RSATPXU4.js} +4 -0
  28. package/dist/{chunk-AHH5USEA.js → chunk-SSETL5EX.js} +2 -2
  29. package/dist/{chunk-RPCKGO3J.js → chunk-SVQTKVXH.js} +16 -11
  30. package/dist/{chunk-W2KZTDET.js → chunk-WZCPZVUC.js} +2 -2
  31. package/dist/{chunk-4BXRRHDC.js → chunk-XCXUVX7I.js} +12 -3
  32. package/dist/{chunk-ZRQWV3MS.js → chunk-YEIPPZ5W.js} +3 -3
  33. package/dist/{chunk-4YXXLWDI.js → chunk-YKO6HG74.js} +4 -4
  34. package/dist/{chunk-2VGLZIU6.js → chunk-ZEP6JIRF.js} +1 -1
  35. package/dist/{conductor-P7XPGYF4.js → conductor-7DEMFEIO.js} +4 -4
  36. package/dist/{conductor-MAYZSFL6.js → conductor-ZQZTYXSX.js} +4 -4
  37. package/dist/{coordinator-prompt-NAM5JHLT.js → coordinator-prompt-AROMFCP2.js} +3 -3
  38. package/dist/{coordinator-prompt-OZFKNCM3.js → coordinator-prompt-K6XHUG3N.js} +3 -3
  39. package/dist/{global-workspace-UGR6FQXI.js → global-workspace-4WAU4PAL.js} +3 -3
  40. package/dist/{global-workspace-CTFQDG7G.js → global-workspace-PX4GUVLW.js} +3 -3
  41. package/dist/index.cjs +33 -11
  42. package/dist/index.d.cts +9 -1
  43. package/dist/index.d.ts +9 -1
  44. package/dist/index.js +22 -17
  45. package/dist/mcp/run-stdio.cjs +29 -11
  46. package/dist/mcp/run-stdio.js +15 -13
  47. package/dist/{optional-cli-FRUZSZ3U.js → optional-cli-JQVNSMSU.js} +3 -3
  48. package/dist/{optional-cli-6SW4OOX3.js → optional-cli-PZXDOVJJ.js} +4 -4
  49. package/dist/{orchestrator-4QVF6CE2.js → orchestrator-LIEGSQ6M.js} +8 -8
  50. package/dist/{orchestrator-BOGVTCWI.js → orchestrator-YNEEEP6O.js} +8 -8
  51. package/dist/{workspaces-QNKFBA63.js → workspaces-MFU3IGAP.js} +3 -3
  52. package/dist/{workspaces-YNZXVBSF.js → workspaces-U7SSD27C.js} +3 -3
  53. package/dist/{worktree-EMCWDPZJ.js → worktree-2VSHRI72.js} +2 -2
  54. package/dist/{worktree-ERRH4TAG.js → worktree-TQKASYPZ.js} +2 -2
  55. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -186,7 +186,7 @@ import {
186
186
  worktreeBoardStatus,
187
187
  worktreeCleanupSettings,
188
188
  writeWorktreeFile
189
- } from "./chunk-LSHGJI4S.js";
189
+ } from "./chunk-BYAFYLLZ.js";
190
190
  import {
191
191
  LEGACY_PLAN_FILE_REL,
192
192
  PLAN_FILE_NAME,
@@ -207,6 +207,7 @@ import {
207
207
  BRIGHTSY_MCP_ALLOWED_TOOLS,
208
208
  CLAUDE_CHROME_ALLOWED_TOOLS,
209
209
  CLAUDE_MODEL_CATALOG,
210
+ CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS,
210
211
  CLAUDE_PRINT_BG_WAIT_CEILING_MS,
211
212
  MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS,
212
213
  PLAN_MODE_INSTRUCTION,
@@ -281,7 +282,7 @@ import {
281
282
  userMcpNamesToDisable,
282
283
  worktreeMcpToolNames,
283
284
  writeInjectedMcpConfig
284
- } from "./chunk-XZW3BXZW.js";
285
+ } from "./chunk-JEYJGQ33.js";
285
286
  import {
286
287
  brightsyMcpServerName,
287
288
  connectBrightsyTeam,
@@ -409,7 +410,7 @@ import {
409
410
  workspaceAgentChatSummaries,
410
411
  worktreeRunPortsPath,
411
412
  wrapReviewSkillMarkdown
412
- } from "./chunk-4YXXLWDI.js";
413
+ } from "./chunk-YKO6HG74.js";
413
414
  import {
414
415
  STDERR_EVENT_MAX_CHARS,
415
416
  STDOUT_EVENT_MAX_CHARS,
@@ -475,7 +476,7 @@ import {
475
476
  parseAbleTimeOAuthCallbackUrl,
476
477
  resolveAbleTimeOAuthHost,
477
478
  startAbleTimeOAuth
478
- } from "./chunk-3E4NOIXN.js";
479
+ } from "./chunk-3D3GGL6X.js";
479
480
  import {
480
481
  ableTimeDependencyTarget,
481
482
  commentAbleTimeTask,
@@ -500,8 +501,8 @@ import {
500
501
  toAbleTimeIssueInfo,
501
502
  updateAbleTimeTask,
502
503
  verifyAbleTimeConnection
503
- } from "./chunk-MYJYINTS.js";
504
- import "./chunk-B3BPLPKQ.js";
504
+ } from "./chunk-LZVWKJXY.js";
505
+ import "./chunk-R3R3ZDFC.js";
505
506
  import {
506
507
  ABLETIME_MCP_PATH,
507
508
  ABLETIME_MCP_PM_PATH,
@@ -522,13 +523,13 @@ import {
522
523
  normalizeAbleTimeCredential,
523
524
  normalizeAbleTimeHost,
524
525
  rewriteAbleTimeError
525
- } from "./chunk-NFPWLDCH.js";
526
+ } from "./chunk-FAXOEKQR.js";
526
527
  import {
527
528
  clearOptionalCliPresenceCache,
528
529
  detectOptionalServiceClis,
529
530
  installOptionalServiceCli,
530
531
  optionalCliPresence
531
- } from "./chunk-OH4EN323.js";
532
+ } from "./chunk-ISEYRGMP.js";
532
533
  import {
533
534
  OPTIONAL_SERVICES,
534
535
  OPTIONAL_SERVICE_IDS,
@@ -544,7 +545,7 @@ import {
544
545
  optionalServiceConnected,
545
546
  optionalServiceSpec,
546
547
  verifyOptionalService
547
- } from "./chunk-AF2DMY3K.js";
548
+ } from "./chunk-QDDTVIWE.js";
548
549
  import {
549
550
  getAgentSetupInfo,
550
551
  installAgent,
@@ -556,7 +557,7 @@ import {
556
557
  prepareTerminalCommand,
557
558
  resolveLoginCommand,
558
559
  whichOnPath
559
- } from "./chunk-NXXQFLNQ.js";
560
+ } from "./chunk-B42H6GJR.js";
560
561
  import {
561
562
  CLOUD_COORDINATOR_BUSY_REPLY,
562
563
  CLOUD_COORDINATOR_CANCELED_REPLY,
@@ -609,7 +610,7 @@ import {
609
610
  stageBuffersAsAttachments,
610
611
  syncWorkspacesFromThreads,
611
612
  takenTeamSlugsForOrchestration
612
- } from "./chunk-ZRQWV3MS.js";
613
+ } from "./chunk-YEIPPZ5W.js";
613
614
  import {
614
615
  GITHUB_PR_BODY_MAX_CHARS,
615
616
  GITHUB_PR_BODY_SAFE_CHARS,
@@ -697,7 +698,7 @@ import {
697
698
  suggestSlug,
698
699
  switchWorktreeBranch,
699
700
  warmGithubAgentAuth
700
- } from "./chunk-2VGLZIU6.js";
701
+ } from "./chunk-ZEP6JIRF.js";
701
702
  import {
702
703
  FAMOUS_SOCCER_TEAMS,
703
704
  allocateTeamName,
@@ -903,6 +904,7 @@ import {
903
904
  isIssueSourceConnected,
904
905
  isLinearConnected,
905
906
  isOrchestratorCapableAgent,
907
+ isPosthogConnected,
906
908
  isSecureFileEncrypted,
907
909
  isUsageOnLimit,
908
910
  issueSourceLabel,
@@ -965,7 +967,7 @@ import {
965
967
  withTurnScopedCost,
966
968
  writeSecureJson,
967
969
  writeViewerContext
968
- } from "./chunk-36J3IZBS.js";
970
+ } from "./chunk-RSATPXU4.js";
969
971
  import {
970
972
  THINKING_EFFORTS,
971
973
  isThinkingEffort,
@@ -4810,6 +4812,7 @@ async function runPosthogApi(input) {
4810
4812
  }
4811
4813
  var POSTHOG_API_DESCRIPTION = "Call the connected PostHog project (Settings \u2192 Connectors). path must start with /api/ and is joined to the stored host. GET is the default. POST /api/projects/:id/query/ and POST /api/environments/:id/query/ are reads (HogQL and insights) and do not need write=true. Other POST and PATCH require write=true, and only when the user asked to change PostHog data. The API key is not in the environment. Do not sign in to a PostHog MCP.";
4812
4814
  function registerPosthogTools(server) {
4815
+ if (!isPosthogConnected()) return;
4813
4816
  server.tool(
4814
4817
  "posthog_api",
4815
4818
  POSTHOG_API_DESCRIPTION,
@@ -5127,7 +5130,7 @@ async function handleJobStop(params, _ctx) {
5127
5130
  return stopDetachedJob(jobCwd(rec), id, reason ? { reason } : void 0);
5128
5131
  }
5129
5132
  async function defaultTurnWait(ref, timeoutMs) {
5130
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-BOGVTCWI.js");
5133
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-YNEEEP6O.js");
5131
5134
  const orch = getOrchestrator2();
5132
5135
  const thread = await orch.waitForTurn(ref, timeoutMs, {
5133
5136
  resolveIfStillRunning: true
@@ -5479,7 +5482,7 @@ async function startMcpServer() {
5479
5482
  );
5480
5483
  }
5481
5484
  try {
5482
- const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-MR2U6AXN.js");
5485
+ const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-3OQWRKOK.js");
5483
5486
  orch.setMaxConcurrent(maxConcurrentAgents2());
5484
5487
  } catch {
5485
5488
  }
@@ -6002,7 +6005,7 @@ async function startMcpServer() {
6002
6005
  if (!worktreeProfile) {
6003
6006
  registerConnectedIssueVendorTools(server);
6004
6007
  const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-DYJGWK6Y.js");
6005
- const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-MR2U6AXN.js");
6008
+ const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-3OQWRKOK.js");
6006
6009
  const accountDefaults = resolveThreadDefaults2();
6007
6010
  const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
6008
6011
  server.tool(
@@ -13240,7 +13243,7 @@ async function continueSourceThread(threadId, prompt) {
13240
13243
  await continueOnReply(threadId, prompt);
13241
13244
  return;
13242
13245
  }
13243
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-BOGVTCWI.js");
13246
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-YNEEEP6O.js");
13244
13247
  await getOrchestrator2().send(threadId, prompt);
13245
13248
  } catch {
13246
13249
  }
@@ -13537,6 +13540,7 @@ export {
13537
13540
  CHAT_TEXT_SCALE_DEFAULT,
13538
13541
  CLAUDE_CHROME_ALLOWED_TOOLS,
13539
13542
  CLAUDE_MODEL_CATALOG,
13543
+ CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS,
13540
13544
  CLAUDE_PRINT_BG_WAIT_CEILING_MS,
13541
13545
  CLAUDE_SUMMARY_TIMEOUT_MS,
13542
13546
  CLI_DIR,
@@ -14093,6 +14097,7 @@ export {
14093
14097
  isPlaceholderBranch,
14094
14098
  isPlanQuestionAnswersMessage,
14095
14099
  isPollWrapperToolName,
14100
+ isPosthogConnected,
14096
14101
  isPrNotMergeableError,
14097
14102
  isPresentPlanToolName,
14098
14103
  isPrimaryCheckoutThread,
@@ -4637,6 +4637,7 @@ __export(app_settings_exports, {
4637
4637
  isChatTextScale: () => isChatTextScale,
4638
4638
  isIssueSourceConnected: () => isIssueSourceConnected,
4639
4639
  isLinearConnected: () => isLinearConnected,
4640
+ isPosthogConnected: () => isPosthogConnected,
4640
4641
  isUsageOnLimit: () => isUsageOnLimit,
4641
4642
  issueSourceLabel: () => issueSourceLabel,
4642
4643
  loadAppSettings: () => loadAppSettings,
@@ -5841,6 +5842,9 @@ function disconnectLinearConnection() {
5841
5842
  delete integrations.linearOrganizationName;
5842
5843
  return saveAppSettings({ ...current, integrations });
5843
5844
  }
5845
+ function isPosthogConnected(settings = loadAppSettings()) {
5846
+ return Boolean(settings.integrations.posthogPersonalApiKey?.trim());
5847
+ }
5844
5848
  function isAbleTimeConnected(settings = loadAppSettings()) {
5845
5849
  return Boolean(
5846
5850
  settings.integrations.abletimeAccessToken?.trim() || settings.integrations.abletimeRefreshToken?.trim()
@@ -9941,7 +9945,7 @@ var init_coordinator_prompt = __esm({
9941
9945
  "- 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.",
9942
9946
  "- 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.",
9943
9947
  "- 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.",
9944
- "- 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.",
9948
+ "- 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.",
9945
9949
  "- get_pr_stack / open_pr_stack_layers / add_stack_layer / create_pr_stack \u2014 GitHub stacked PRs (`gh stack`); one worktree per layer",
9946
9950
  "- list_models \u2014 only when you need a specific model (rare); otherwise omit model so Account defaults apply",
9947
9951
  "- 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.",
@@ -11136,7 +11140,7 @@ function mcpAllowToolsFromNames(names) {
11136
11140
  [...names].map((name) => name.trim()).filter(Boolean).map((name) => ({ name, connected: true, needsAuth: false }))
11137
11141
  );
11138
11142
  }
11139
- var BASE_ALLOWED_TOOLS, CLAUDE_PRINT_BG_WAIT_CEILING_MS, CLAUDE_CHROME_ALLOWED_TOOLS;
11143
+ var BASE_ALLOWED_TOOLS, CLAUDE_PRINT_BG_WAIT_CEILING_MS, CLAUDE_CHROME_ALLOWED_TOOLS, CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS;
11140
11144
  var init_claude_mcp = __esm({
11141
11145
  "src/agents/claude-mcp.ts"() {
11142
11146
  "use strict";
@@ -11163,6 +11167,10 @@ var init_claude_mcp = __esm({
11163
11167
  "mcp__claude-in-chrome__*",
11164
11168
  "Skill(claude-in-chrome)"
11165
11169
  ];
11170
+ CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS = [
11171
+ "mcp__claude_ai_PostHog",
11172
+ "mcp__claude_ai_PostHog__*"
11173
+ ];
11166
11174
  }
11167
11175
  });
11168
11176
 
@@ -11510,11 +11518,9 @@ var init_node_launch = __esm({
11510
11518
 
11511
11519
  // src/agents/injected-mcp.ts
11512
11520
  function sideboardWorktreeAllowedTools(opts) {
11513
- const out = [...SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS];
11514
- if (!opts?.planMode) {
11515
- const idx = out.indexOf("mcp__sideboard__present_plan");
11516
- if (idx >= 0) out.splice(idx, 1);
11517
- }
11521
+ const out = SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS.filter(
11522
+ (tool) => (opts?.planMode || tool !== "mcp__sideboard__present_plan") && (opts?.posthog || tool !== "mcp__sideboard__posthog_api")
11523
+ );
11518
11524
  if (opts?.github !== false) out.push(...SIDEBOARD_GITHUB_MCP_ALLOWED_TOOLS);
11519
11525
  if (opts?.linear) out.push(...SIDEBOARD_LINEAR_MCP_ALLOWED_TOOLS);
11520
11526
  if (opts?.abletime) out.push(...SIDEBOARD_ABLETIME_MCP_ALLOWED_TOOLS);
@@ -12742,9 +12748,11 @@ var init_claude = __esm({
12742
12748
  github: true,
12743
12749
  linear: isLinearConnected(),
12744
12750
  abletime: isAbleTimeConnected(),
12745
- planMode: thread.planMode
12751
+ planMode: thread.planMode,
12752
+ posthog: isPosthogConnected()
12746
12753
  }),
12747
- ...brightsyMcpAllowedTools(injectedBrightsyNames)
12754
+ ...brightsyMcpAllowedTools(injectedBrightsyNames),
12755
+ ...isPosthogConnected() ? [] : CLAUDE_POSTHOG_CONNECTOR_ALLOWED_TOOLS
12748
12756
  ];
12749
12757
  }
12750
12758
  if (chromeOn) {
@@ -24267,6 +24275,12 @@ function connectorDirectiveLine(spec, cli) {
24267
24275
  }
24268
24276
  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.`;
24269
24277
  }
24278
+ function connectorAuthCaution(posthog, cliConnected) {
24279
+ 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.";
24280
+ const token = cliConnected ? " CLI tokens are already in this process." : "";
24281
+ const key = posthog ? " Do not read a PostHog key from the environment." : "";
24282
+ return `${signIn}${token}${key}`;
24283
+ }
24270
24284
  function connectorReminderBit(spec, cli) {
24271
24285
  if (!spec.cli) return `${spec.label}: \`posthog_api\``;
24272
24286
  const presence = cliPresencePhrase(spec, cli);
@@ -24276,10 +24290,11 @@ function formatOptionalServicesDirective(integrations, cli) {
24276
24290
  const connected = connectedOptionalServices(integrations);
24277
24291
  if (connected.length === 0) return null;
24278
24292
  const cliConnected = connected.some((spec) => spec.cli);
24293
+ const posthog = connected.some((spec) => spec.id === "posthog");
24279
24294
  const lines = [
24280
24295
  cliConnected ? "Optional connectors (connected \u2014 CLI tokens are already in this process env):" : "Optional connectors (connected):",
24281
24296
  ...connected.map((spec) => connectorDirectiveLine(spec, cli)),
24282
- 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.",
24297
+ connectorAuthCaution(posthog, cliConnected),
24283
24298
  "Do not add a vendor MCP. When a binary is missing, ask the user to press Install CLI in Settings \u2192 Connectors.",
24284
24299
  "When you shell a connector CLI, write bulky output to `.context/cli/` and read a slice."
24285
24300
  ];
@@ -24290,7 +24305,9 @@ function formatOptionalServicesReminder(integrations, cli) {
24290
24305
  if (connected.length === 0) return null;
24291
24306
  const bits = connected.map((spec) => connectorReminderBit(spec, cli)).join(". ");
24292
24307
  const tokenBit = connected.some((spec) => spec.cli) ? "CLI tokens are already in this process. " : "";
24293
- 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.`;
24308
+ const posthog = connected.some((spec) => spec.id === "posthog");
24309
+ 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.";
24310
+ 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.`;
24294
24311
  }
24295
24312
  async function connectedCliPresence(integrations) {
24296
24313
  const ids = connectedOptionalServices(integrations).filter((spec) => spec.cli).map((spec) => spec.id);
@@ -31645,6 +31662,7 @@ async function runPosthogApi(input) {
31645
31662
  }
31646
31663
  var POSTHOG_API_DESCRIPTION = "Call the connected PostHog project (Settings \u2192 Connectors). path must start with /api/ and is joined to the stored host. GET is the default. POST /api/projects/:id/query/ and POST /api/environments/:id/query/ are reads (HogQL and insights) and do not need write=true. Other POST and PATCH require write=true, and only when the user asked to change PostHog data. The API key is not in the environment. Do not sign in to a PostHog MCP.";
31647
31664
  function registerPosthogTools(server) {
31665
+ if (!isPosthogConnected()) return;
31648
31666
  server.tool(
31649
31667
  "posthog_api",
31650
31668
  POSTHOG_API_DESCRIPTION,
@@ -50,7 +50,7 @@ import {
50
50
  syncBoardPins,
51
51
  updateSchedule,
52
52
  workspaceTagTargetRef
53
- } from "../chunk-IP5WSADC.js";
53
+ } from "../chunk-CECZUHA5.js";
54
54
  import "../chunk-LX5R5JOR.js";
55
55
  import {
56
56
  commentAbleTimeTask,
@@ -70,12 +70,12 @@ import {
70
70
  searchAbleTimeTasks,
71
71
  toAbleTimeIssueInfo,
72
72
  updateAbleTimeTask
73
- } from "../chunk-Y67TBJD5.js";
74
- import "../chunk-AHH5USEA.js";
75
- import "../chunk-GU6DT6NO.js";
73
+ } from "../chunk-MOP5L5QZ.js";
74
+ import "../chunk-SSETL5EX.js";
75
+ import "../chunk-HSF2RQSQ.js";
76
76
  import {
77
77
  normalizeServiceOrigin
78
- } from "../chunk-4BXRRHDC.js";
78
+ } from "../chunk-XCXUVX7I.js";
79
79
  import {
80
80
  PRESENT_PLAN_REQUIRES_PLAN_MODE,
81
81
  PRESENT_PLAN_TOOL_DESCRIPTION,
@@ -93,8 +93,8 @@ import {
93
93
  sideboardMcpProfile,
94
94
  trustSystemCertificates,
95
95
  worktreeMcpToolNames
96
- } from "../chunk-RPCKGO3J.js";
97
- import "../chunk-W2KZTDET.js";
96
+ } from "../chunk-SVQTKVXH.js";
97
+ import "../chunk-WZCPZVUC.js";
98
98
  import "../chunk-7IAMHN2N.js";
99
99
  import "../chunk-PXMLMBMI.js";
100
100
  import {
@@ -110,7 +110,7 @@ import {
110
110
  waitForDetachedJob,
111
111
  waitForTurnToolResult,
112
112
  workspaceAgentChatSummaries
113
- } from "../chunk-WRDKJRWF.js";
113
+ } from "../chunk-BJUHZSZQ.js";
114
114
  import {
115
115
  clipToolResultForStore,
116
116
  isInternalAgentStatusText,
@@ -119,7 +119,7 @@ import {
119
119
  import {
120
120
  GLOBAL_WORKSPACE_ID,
121
121
  isCloudCoordinatorThread
122
- } from "../chunk-PO3PDNMV.js";
122
+ } from "../chunk-E7G7RY6T.js";
123
123
  import {
124
124
  canonicalizeRepoPath,
125
125
  formatGhLandError,
@@ -130,7 +130,7 @@ import {
130
130
  resolveListPrsOptions,
131
131
  resolveRepoRoot,
132
132
  warmGithubAgentAuth
133
- } from "../chunk-UO5C2L2G.js";
133
+ } from "../chunk-6SGYGYH7.js";
134
134
  import {
135
135
  CLI_DIR
136
136
  } from "../chunk-N2WW62LF.js";
@@ -145,13 +145,14 @@ import {
145
145
  formatWorkspaceProfileSuffix,
146
146
  isAbleTimeConnected,
147
147
  isLinearConnected,
148
+ isPosthogConnected,
148
149
  loadAppSettings,
149
150
  resolveEffectiveIssueSource,
150
151
  resolveProjectReviewLabel,
151
152
  resolveViewerProfile,
152
153
  resolveViewerProfileForRepo,
153
154
  saveLinearOAuth
154
- } from "../chunk-MVZO7QZ2.js";
155
+ } from "../chunk-BU6HH5VA.js";
155
156
  import "../chunk-NSTQ6QKD.js";
156
157
  import {
157
158
  dropNestedElectronEnvFromProcess
@@ -3315,6 +3316,7 @@ async function runPosthogApi(input) {
3315
3316
  }
3316
3317
  var POSTHOG_API_DESCRIPTION = "Call the connected PostHog project (Settings \u2192 Connectors). path must start with /api/ and is joined to the stored host. GET is the default. POST /api/projects/:id/query/ and POST /api/environments/:id/query/ are reads (HogQL and insights) and do not need write=true. Other POST and PATCH require write=true, and only when the user asked to change PostHog data. The API key is not in the environment. Do not sign in to a PostHog MCP.";
3317
3318
  function registerPosthogTools(server) {
3319
+ if (!isPosthogConnected()) return;
3318
3320
  server.tool(
3319
3321
  "posthog_api",
3320
3322
  POSTHOG_API_DESCRIPTION,
@@ -3828,7 +3830,7 @@ async function startMcpServer() {
3828
3830
  );
3829
3831
  }
3830
3832
  try {
3831
- const { maxConcurrentAgents } = await import("../app-settings-EHMXHNG5.js");
3833
+ const { maxConcurrentAgents } = await import("../app-settings-2IH42VA5.js");
3832
3834
  orch.setMaxConcurrent(maxConcurrentAgents());
3833
3835
  } catch {
3834
3836
  }
@@ -4351,7 +4353,7 @@ async function startMcpServer() {
4351
4353
  if (!worktreeProfile) {
4352
4354
  registerConnectedIssueVendorTools(server);
4353
4355
  const { getCaffeinateHold, setCaffeinateHold } = await import("../caffeinate-hold-7JM5H5P3.js");
4354
- const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-EHMXHNG5.js");
4356
+ const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-2IH42VA5.js");
4355
4357
  const accountDefaults = resolveThreadDefaults();
4356
4358
  const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
4357
4359
  server.tool(
@@ -4,16 +4,16 @@ import {
4
4
  OPTIONAL_SERVICES,
5
5
  isOptionalServiceId,
6
6
  optionalServiceSpec
7
- } from "./chunk-4BXRRHDC.js";
7
+ } from "./chunk-XCXUVX7I.js";
8
8
  import {
9
9
  installNpmGlobalPackage,
10
10
  whichOnPath
11
- } from "./chunk-W2KZTDET.js";
11
+ } from "./chunk-WZCPZVUC.js";
12
12
  import "./chunk-2GPQZZLY.js";
13
13
  import {
14
14
  enrichPathWithNpmGlobalBin
15
15
  } from "./chunk-2UG25RMK.js";
16
- import "./chunk-MVZO7QZ2.js";
16
+ import "./chunk-BU6HH5VA.js";
17
17
  import "./chunk-NSTQ6QKD.js";
18
18
  import "./chunk-WWUABK6B.js";
19
19
  import "./chunk-FJZWM2ON.js";
@@ -3,12 +3,12 @@ import {
3
3
  detectOptionalServiceClis,
4
4
  installOptionalServiceCli,
5
5
  optionalCliPresence
6
- } from "./chunk-OH4EN323.js";
7
- import "./chunk-AF2DMY3K.js";
8
- import "./chunk-NXXQFLNQ.js";
6
+ } from "./chunk-ISEYRGMP.js";
7
+ import "./chunk-QDDTVIWE.js";
8
+ import "./chunk-B42H6GJR.js";
9
9
  import "./chunk-JAT3JFOS.js";
10
10
  import "./chunk-QVN2WOKJ.js";
11
- import "./chunk-36J3IZBS.js";
11
+ import "./chunk-RSATPXU4.js";
12
12
  import "./chunk-77WWLBCI.js";
13
13
  import "./chunk-4TR3HZFT.js";
14
14
  import "./chunk-WDRMZKVB.js";
@@ -11,24 +11,24 @@ import {
11
11
  resolveSendFollowUp,
12
12
  startOrchestration,
13
13
  waitForPidExit
14
- } from "./chunk-IP5WSADC.js";
14
+ } from "./chunk-CECZUHA5.js";
15
15
  import "./chunk-LX5R5JOR.js";
16
- import "./chunk-4BXRRHDC.js";
16
+ import "./chunk-XCXUVX7I.js";
17
17
  import "./chunk-4GK32AYX.js";
18
18
  import "./chunk-5DZUWGKV.js";
19
- import "./chunk-RPCKGO3J.js";
20
- import "./chunk-W2KZTDET.js";
19
+ import "./chunk-SVQTKVXH.js";
20
+ import "./chunk-WZCPZVUC.js";
21
21
  import "./chunk-7IAMHN2N.js";
22
22
  import "./chunk-PXMLMBMI.js";
23
23
  import "./chunk-2GPQZZLY.js";
24
- import "./chunk-WRDKJRWF.js";
24
+ import "./chunk-BJUHZSZQ.js";
25
25
  import "./chunk-AFLNFGGB.js";
26
- import "./chunk-PO3PDNMV.js";
27
- import "./chunk-UO5C2L2G.js";
26
+ import "./chunk-E7G7RY6T.js";
27
+ import "./chunk-6SGYGYH7.js";
28
28
  import "./chunk-N2WW62LF.js";
29
29
  import "./chunk-DD67JWTN.js";
30
30
  import "./chunk-2UG25RMK.js";
31
- import "./chunk-MVZO7QZ2.js";
31
+ import "./chunk-BU6HH5VA.js";
32
32
  import "./chunk-NSTQ6QKD.js";
33
33
  import "./chunk-WWUABK6B.js";
34
34
  import "./chunk-FJZWM2ON.js";
@@ -9,17 +9,17 @@ import {
9
9
  resolveSendFollowUp,
10
10
  startOrchestration,
11
11
  waitForPidExit
12
- } from "./chunk-LSHGJI4S.js";
12
+ } from "./chunk-BYAFYLLZ.js";
13
13
  import "./chunk-PGPSIEMW.js";
14
- import "./chunk-XZW3BXZW.js";
14
+ import "./chunk-JEYJGQ33.js";
15
15
  import "./chunk-VGNLMGBK.js";
16
- import "./chunk-4YXXLWDI.js";
16
+ import "./chunk-YKO6HG74.js";
17
17
  import "./chunk-YSLCWCMJ.js";
18
18
  import "./chunk-7H655NEW.js";
19
- import "./chunk-AF2DMY3K.js";
20
- import "./chunk-NXXQFLNQ.js";
21
- import "./chunk-ZRQWV3MS.js";
22
- import "./chunk-2VGLZIU6.js";
19
+ import "./chunk-QDDTVIWE.js";
20
+ import "./chunk-B42H6GJR.js";
21
+ import "./chunk-YEIPPZ5W.js";
22
+ import "./chunk-ZEP6JIRF.js";
23
23
  import "./chunk-QB5MDOHL.js";
24
24
  import "./chunk-2P4XKWV2.js";
25
25
  import "./chunk-33KDPEK4.js";
@@ -31,7 +31,7 @@ import "./chunk-6K64FJDD.js";
31
31
  import "./chunk-UWQ6UCIB.js";
32
32
  import "./chunk-QVN2WOKJ.js";
33
33
  import "./chunk-NYBFYFK7.js";
34
- import "./chunk-36J3IZBS.js";
34
+ import "./chunk-RSATPXU4.js";
35
35
  import "./chunk-77WWLBCI.js";
36
36
  import "./chunk-4TR3HZFT.js";
37
37
  import "./chunk-WDRMZKVB.js";
@@ -11,12 +11,12 @@ import {
11
11
  removeWorkspace,
12
12
  sameWorkspacePath,
13
13
  syncWorkspacesFromThreads
14
- } from "./chunk-PO3PDNMV.js";
15
- import "./chunk-UO5C2L2G.js";
14
+ } from "./chunk-E7G7RY6T.js";
15
+ import "./chunk-6SGYGYH7.js";
16
16
  import "./chunk-N2WW62LF.js";
17
17
  import "./chunk-DD67JWTN.js";
18
18
  import "./chunk-2UG25RMK.js";
19
- import "./chunk-MVZO7QZ2.js";
19
+ import "./chunk-BU6HH5VA.js";
20
20
  import "./chunk-NSTQ6QKD.js";
21
21
  import "./chunk-WWUABK6B.js";
22
22
  import "./chunk-FJZWM2ON.js";
@@ -9,14 +9,14 @@ import {
9
9
  removeWorkspace,
10
10
  sameWorkspacePath,
11
11
  syncWorkspacesFromThreads
12
- } from "./chunk-ZRQWV3MS.js";
13
- import "./chunk-2VGLZIU6.js";
12
+ } from "./chunk-YEIPPZ5W.js";
13
+ import "./chunk-ZEP6JIRF.js";
14
14
  import "./chunk-QB5MDOHL.js";
15
15
  import "./chunk-2P4XKWV2.js";
16
16
  import "./chunk-6K64FJDD.js";
17
17
  import "./chunk-UWQ6UCIB.js";
18
18
  import "./chunk-QVN2WOKJ.js";
19
- import "./chunk-36J3IZBS.js";
19
+ import "./chunk-RSATPXU4.js";
20
20
  import "./chunk-77WWLBCI.js";
21
21
  import "./chunk-4TR3HZFT.js";
22
22
  import "./chunk-WDRMZKVB.js";
@@ -50,11 +50,11 @@ import {
50
50
  slugify,
51
51
  suggestSlug,
52
52
  switchWorktreeBranch
53
- } from "./chunk-UO5C2L2G.js";
53
+ } from "./chunk-6SGYGYH7.js";
54
54
  import "./chunk-N2WW62LF.js";
55
55
  import "./chunk-DD67JWTN.js";
56
56
  import "./chunk-2UG25RMK.js";
57
- import "./chunk-MVZO7QZ2.js";
57
+ import "./chunk-BU6HH5VA.js";
58
58
  import "./chunk-NSTQ6QKD.js";
59
59
  import "./chunk-WWUABK6B.js";
60
60
  import "./chunk-FJZWM2ON.js";
@@ -48,7 +48,7 @@ import {
48
48
  slugify,
49
49
  suggestSlug,
50
50
  switchWorktreeBranch
51
- } from "./chunk-2VGLZIU6.js";
51
+ } from "./chunk-ZEP6JIRF.js";
52
52
  import {
53
53
  FAMOUS_SOCCER_TEAMS,
54
54
  allocateTeamName,
@@ -69,7 +69,7 @@ import "./chunk-2P4XKWV2.js";
69
69
  import "./chunk-6K64FJDD.js";
70
70
  import "./chunk-UWQ6UCIB.js";
71
71
  import "./chunk-QVN2WOKJ.js";
72
- import "./chunk-36J3IZBS.js";
72
+ import "./chunk-RSATPXU4.js";
73
73
  import "./chunk-77WWLBCI.js";
74
74
  import "./chunk-4TR3HZFT.js";
75
75
  import "./chunk-WDRMZKVB.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideboard-ai/core",
3
- "version": "0.1.293",
3
+ "version": "0.1.294",
4
4
  "description": "Sideboard core — orchestration, agents, git worktrees, MCP server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",