@sideboard-ai/core 0.1.147 → 0.1.148

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 (27) hide show
  1. package/dist/{agents-YVETHB2R.js → agents-DUF4Q2ZI.js} +3 -3
  2. package/dist/{agents-N3KMRQUZ.js → agents-INCTFWKA.js} +3 -3
  3. package/dist/{chunk-JHZ6HGRI.js → chunk-3QRGCKYL.js} +1 -1
  4. package/dist/{chunk-KZG47SZP.js → chunk-5MS2XTNV.js} +11 -11
  5. package/dist/{chunk-ZZBN2MR7.js → chunk-CTXQHSTY.js} +11 -11
  6. package/dist/{chunk-SXPTL222.js → chunk-EGDRPA4B.js} +1 -1
  7. package/dist/{chunk-KNE3FZ46.js → chunk-N3VNOFXQ.js} +1 -1
  8. package/dist/{chunk-JW436RTA.js → chunk-Q62SDB53.js} +1 -1
  9. package/dist/{chunk-IHSR7EVK.js → chunk-R4JP32P5.js} +1 -1
  10. package/dist/{chunk-4RYRNJPN.js → chunk-XOKHXFFX.js} +2 -2
  11. package/dist/{chunk-WWH4NNBH.js → chunk-YQRBNOIW.js} +2 -2
  12. package/dist/{chunk-67K3FRKR.js → chunk-ZVYLEF72.js} +1 -1
  13. package/dist/{coordinator-prompt-2EOR35TP.js → coordinator-prompt-5GXGBGEZ.js} +1 -1
  14. package/dist/{coordinator-prompt-6EPVHVGJ.js → coordinator-prompt-ZWBMAIWA.js} +1 -1
  15. package/dist/{global-workspace-PANZGRUS.js → global-workspace-2SIPM4PW.js} +2 -2
  16. package/dist/{global-workspace-EZVQPMWT.js → global-workspace-OJRXWXEA.js} +2 -2
  17. package/dist/index.cjs +147 -6
  18. package/dist/index.d.cts +50 -1
  19. package/dist/index.d.ts +50 -1
  20. package/dist/index.js +150 -10
  21. package/dist/mcp/run-stdio.cjs +145 -6
  22. package/dist/mcp/run-stdio.js +149 -10
  23. package/dist/{orchestrator-KWV2PPML.js → orchestrator-NWIU5TJP.js} +5 -5
  24. package/dist/{orchestrator-T35BJZWY.js → orchestrator-OVYITCO6.js} +5 -5
  25. package/dist/{workspaces-ZJATBC4A.js → workspaces-3NUUZTQK.js} +3 -3
  26. package/dist/{workspaces-DWERPUQJ.js → workspaces-UUJNOO4T.js} +3 -3
  27. package/package.json +1 -1
@@ -30,7 +30,7 @@ import {
30
30
  resolveLoginCommand,
31
31
  resolveQuotaFallbackAgent,
32
32
  whichOnPath
33
- } from "./chunk-WWH4NNBH.js";
33
+ } from "./chunk-YQRBNOIW.js";
34
34
  import "./chunk-KBWND62T.js";
35
35
  import "./chunk-M267JPEA.js";
36
36
  import {
@@ -38,8 +38,8 @@ import {
38
38
  assertOrchestratorCapableAgent,
39
39
  coerceOrchestratorAgent,
40
40
  isOrchestratorCapableAgent
41
- } from "./chunk-IHSR7EVK.js";
42
- import "./chunk-SXPTL222.js";
41
+ } from "./chunk-R4JP32P5.js";
42
+ import "./chunk-EGDRPA4B.js";
43
43
  import "./chunk-ELBYOGVA.js";
44
44
  import {
45
45
  cursorSdkMessageToEvents,
@@ -36,7 +36,7 @@ import {
36
36
  resolveQuotaFallbackAgent,
37
37
  turnCostUsdFromCursorUsage,
38
38
  whichOnPath
39
- } from "./chunk-4RYRNJPN.js";
39
+ } from "./chunk-XOKHXFFX.js";
40
40
  import "./chunk-ED4UPEJX.js";
41
41
  import "./chunk-S42XV45P.js";
42
42
  import "./chunk-6GN5WPYZ.js";
@@ -45,8 +45,8 @@ import {
45
45
  assertOrchestratorCapableAgent,
46
46
  coerceOrchestratorAgent,
47
47
  isOrchestratorCapableAgent
48
- } from "./chunk-KNE3FZ46.js";
49
- import "./chunk-67K3FRKR.js";
48
+ } from "./chunk-N3VNOFXQ.js";
49
+ import "./chunk-ZVYLEF72.js";
50
50
  import "./chunk-JTPDWTWJ.js";
51
51
  import "./chunk-B3SJXYIJ.js";
52
52
  import "./chunk-EUXOHTUK.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isGlobalRepoPath
3
- } from "./chunk-IHSR7EVK.js";
3
+ } from "./chunk-R4JP32P5.js";
4
4
  import {
5
5
  ensureGhPreferOrigin,
6
6
  resolveRepoRoot
@@ -32,13 +32,13 @@ import {
32
32
  summarizeTurnStderr,
33
33
  toolDescription,
34
34
  turnFailChatText
35
- } from "./chunk-4RYRNJPN.js";
35
+ } from "./chunk-XOKHXFFX.js";
36
36
  import {
37
37
  addWorkspace,
38
38
  ensureWorkspace,
39
39
  removeWorkspace,
40
40
  syncWorkspacesFromThreads
41
- } from "./chunk-JW436RTA.js";
41
+ } from "./chunk-Q62SDB53.js";
42
42
  import {
43
43
  extractPresentedPlan,
44
44
  readPlanFile,
@@ -63,14 +63,14 @@ import {
63
63
  persistPendingFileAttachments,
64
64
  stageAbsolutePathsAsAttachments,
65
65
  stageBuffersAsAttachments
66
- } from "./chunk-KNE3FZ46.js";
66
+ } from "./chunk-N3VNOFXQ.js";
67
67
  import {
68
68
  SLACK_REPLY_FORMATTING,
69
69
  coordinatorSystemPrompt,
70
70
  coordinatorTurnReminder,
71
71
  enrichWorkspacesWithGithub,
72
72
  ensureGlobalCoordinatorCwd
73
- } from "./chunk-67K3FRKR.js";
73
+ } from "./chunk-ZVYLEF72.js";
74
74
  import {
75
75
  addPrStackLayer,
76
76
  allocateTeamName,
@@ -391,7 +391,7 @@ async function continueSourceThread(threadId, prompt) {
391
391
  await continueOnReply(threadId, prompt);
392
392
  return;
393
393
  }
394
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-T35BJZWY.js");
394
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-OVYITCO6.js");
395
395
  await getOrchestrator2().send(threadId, prompt);
396
396
  } catch {
397
397
  }
@@ -732,9 +732,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
732
732
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
733
733
  );
734
734
  }
735
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-PANZGRUS.js");
735
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-2SIPM4PW.js");
736
736
  if (isGlobalThread2(thread)) {
737
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-2EOR35TP.js");
737
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-5GXGBGEZ.js");
738
738
  ensureGlobalCoordinatorCwd2(
739
739
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
740
740
  );
@@ -3005,7 +3005,7 @@ async function createThread(input, _onSetupLine) {
3005
3005
  return readThread(thread.id) ?? thread;
3006
3006
  }
3007
3007
  async function listLinearIssues(agent, repoPath) {
3008
- const { getAdapter: getAdapter2 } = await import("./agents-N3KMRQUZ.js");
3008
+ const { getAdapter: getAdapter2 } = await import("./agents-INCTFWKA.js");
3009
3009
  await requireAgent(agent, { requireLinear: true });
3010
3010
  const adapter = getAdapter2(agent);
3011
3011
  if (!adapter.listLinearIssues) {
@@ -3412,7 +3412,7 @@ async function adoptThread(input) {
3412
3412
  messages: input.messages ?? []
3413
3413
  });
3414
3414
  writeThread(thread);
3415
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-DWERPUQJ.js");
3415
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-UUJNOO4T.js");
3416
3416
  await ensureWorkspace2(repoPath);
3417
3417
  return thread;
3418
3418
  }
@@ -5611,7 +5611,7 @@ function formatScheduledPrompt(name, prompt) {
5611
5611
  ${prompt}`;
5612
5612
  }
5613
5613
  async function defaultDeps() {
5614
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-T35BJZWY.js");
5614
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-OVYITCO6.js");
5615
5615
  const orch = getOrchestrator2();
5616
5616
  return {
5617
5617
  findThread: (id) => findThreadByRef(id),
@@ -7547,7 +7547,7 @@ var Orchestrator = class {
7547
7547
  this.emit({ type: "status_changed", threadId: archived.id, status: "archived" });
7548
7548
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
7549
7549
  try {
7550
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-DWERPUQJ.js");
7550
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-UUJNOO4T.js");
7551
7551
  await ensureWorkspace2(thread.repoPath);
7552
7552
  } catch {
7553
7553
  }
@@ -18,13 +18,13 @@ import {
18
18
  stripBrightsyNdjsonNoise,
19
19
  sumUsageList,
20
20
  toolDescription
21
- } from "./chunk-WWH4NNBH.js";
21
+ } from "./chunk-YQRBNOIW.js";
22
22
  import {
23
23
  addWorkspace,
24
24
  ensureWorkspace,
25
25
  removeWorkspace,
26
26
  syncWorkspacesFromThreads
27
- } from "./chunk-JHZ6HGRI.js";
27
+ } from "./chunk-3QRGCKYL.js";
28
28
  import {
29
29
  assertOrchestratorCapableAgent,
30
30
  attachmentsFromWorktreePaths,
@@ -41,14 +41,14 @@ import {
41
41
  persistPendingFileAttachments,
42
42
  stageAbsolutePathsAsAttachments,
43
43
  stageBuffersAsAttachments
44
- } from "./chunk-IHSR7EVK.js";
44
+ } from "./chunk-R4JP32P5.js";
45
45
  import {
46
46
  SLACK_REPLY_FORMATTING,
47
47
  coordinatorSystemPrompt,
48
48
  coordinatorTurnReminder,
49
49
  enrichWorkspacesWithGithub,
50
50
  ensureGlobalCoordinatorCwd
51
- } from "./chunk-SXPTL222.js";
51
+ } from "./chunk-EGDRPA4B.js";
52
52
  import {
53
53
  httpFetch
54
54
  } from "./chunk-ELBYOGVA.js";
@@ -456,7 +456,7 @@ async function continueSourceThread(threadId, prompt) {
456
456
  await continueOnReply(threadId, prompt);
457
457
  return;
458
458
  }
459
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-KWV2PPML.js");
459
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-NWIU5TJP.js");
460
460
  await getOrchestrator2().send(threadId, prompt);
461
461
  } catch {
462
462
  }
@@ -736,9 +736,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
736
736
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
737
737
  );
738
738
  }
739
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-EZVQPMWT.js");
739
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-OJRXWXEA.js");
740
740
  if (isGlobalThread2(thread)) {
741
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-6EPVHVGJ.js");
741
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-ZWBMAIWA.js");
742
742
  ensureGlobalCoordinatorCwd2(
743
743
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
744
744
  );
@@ -3073,7 +3073,7 @@ async function createThread(input, _onSetupLine) {
3073
3073
  return readThread(thread.id) ?? thread;
3074
3074
  }
3075
3075
  async function listLinearIssues(agent, repoPath) {
3076
- const { getAdapter: getAdapter2 } = await import("./agents-YVETHB2R.js");
3076
+ const { getAdapter: getAdapter2 } = await import("./agents-DUF4Q2ZI.js");
3077
3077
  await requireAgent(agent, { requireLinear: true });
3078
3078
  const adapter = getAdapter2(agent);
3079
3079
  if (!adapter.listLinearIssues) {
@@ -3480,7 +3480,7 @@ async function adoptThread(input) {
3480
3480
  messages: input.messages ?? []
3481
3481
  });
3482
3482
  writeThread(thread);
3483
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-ZJATBC4A.js");
3483
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-3NUUZTQK.js");
3484
3484
  await ensureWorkspace2(repoPath);
3485
3485
  return thread;
3486
3486
  }
@@ -5928,7 +5928,7 @@ function formatScheduledPrompt(name, prompt) {
5928
5928
  ${prompt}`;
5929
5929
  }
5930
5930
  async function defaultDeps() {
5931
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-KWV2PPML.js");
5931
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-NWIU5TJP.js");
5932
5932
  const orch = getOrchestrator2();
5933
5933
  return {
5934
5934
  findThread: (id) => findThreadByRef(id),
@@ -7864,7 +7864,7 @@ var Orchestrator = class {
7864
7864
  this.emit({ type: "status_changed", threadId: archived.id, status: "archived" });
7865
7865
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
7866
7866
  try {
7867
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-ZJATBC4A.js");
7867
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-3NUUZTQK.js");
7868
7868
  await ensureWorkspace2(thread.repoPath);
7869
7869
  } catch {
7870
7870
  }
@@ -46,7 +46,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
46
46
  "- list_workspaces \u2014 registered repos (path + github slug when known)",
47
47
  "- list_board \u2014 Home Kanban of worktrees (New / Draft / Review / Merged; one card per checkout). Path to merge: no PR \u2192 draft PR \u2192 open PR \u2192 merged. Archive removes the card to Settings \u2192 History. Queued/running are activity on the card, not columns. Orchestration chats are not on the board. Filters: query, repoPath, kind, column, limit.",
48
48
  "- list_branches / list_prs / list_issues \u2014 pass repoPath from list_workspaces (issues: Linear, AbleTime MCP, or GitHub Issues)",
49
- "- linear_list_teams / linear_get_issue / linear_create_issue / linear_update_issue / linear_comment \u2014 Linear Account connection; call linear_list_teams for team key and workflow states; pass ENG-123 or uuid. If mutations fail with a scope error, Disconnect and Connect Linear in Account settings.",
49
+ "- linear_list_teams / linear_get_issue / linear_create_issue / linear_update_issue / linear_comment \u2014 Linear Account connection; call linear_list_teams for team key and workflow states; pass ENG-123 or uuid. linear_get_issue returns comments, relations, parent/children, and the rest of the issue metadata. If mutations fail with a scope error, Disconnect and Connect Linear in Account settings.",
50
50
  "- abletime_orientation / abletime_list_projects / abletime_list_tasks / abletime_search_tasks / abletime_get_task / abletime_create_task / abletime_ensure_task \u2014 AbleTime Account personal access token (hosted MCP). Call orientation first. If work has no task yet, abletime_ensure_task creates one to track against (or create_thread from the default branch does that automatically when AbleTime is the preferred issue source).",
51
51
  "- list_teams / slack_list_channels / slack_list_users / slack_search / slack_read / slack_post / slack_replies \u2014 Slack workspaces from Settings \u2192 Remote; pass team_id from list_teams",
52
52
  "- Optional connectors (Vercel, Supabase, PostHog, Sentry) in Settings \u2192 Connectors inject tokens into worktree agent env when connected. Prefer official CLIs (`vercel`, `supabase`, `sentry-cli`) with those env vars. PostHog has no first-class CLI \u2014 use the HTTP API (`POSTHOG_PERSONAL_API_KEY`). If a CLI is missing, the user can Install CLI on that row (not auto-installed on Connect). Do not add vendor MCPs or ask the user to paste tokens again. Git (`gh`) stays Settings \u2192 Git; issue tracking stays Settings \u2192 Issues; Slack stays Settings \u2192 Remote (Sideboard MCP).",
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  ensureGlobalCoordinatorCwd
5
- } from "./chunk-67K3FRKR.js";
5
+ } from "./chunk-ZVYLEF72.js";
6
6
  import {
7
7
  allocateTeamName,
8
8
  takenSlugsFromThread,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  isGlobalRepoPath
5
- } from "./chunk-KNE3FZ46.js";
5
+ } from "./chunk-N3VNOFXQ.js";
6
6
  import {
7
7
  ensureGhPreferOrigin,
8
8
  resolveRepoRoot
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ensureGlobalCoordinatorCwd
3
- } from "./chunk-SXPTL222.js";
3
+ } from "./chunk-EGDRPA4B.js";
4
4
  import {
5
5
  allocateTeamName,
6
6
  takenSlugsFromThread,
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-S42XV45P.js";
12
12
  import {
13
13
  isOrchestratorThread
14
- } from "./chunk-KNE3FZ46.js";
14
+ } from "./chunk-N3VNOFXQ.js";
15
15
  import {
16
16
  codexUnattendedGitConfigArgs,
17
17
  mergeAgentGitAuthEnv,
@@ -2085,7 +2085,7 @@ var claudeAdapter = {
2085
2085
  );
2086
2086
  }
2087
2087
  const mode = permissionMode(thread);
2088
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-PANZGRUS.js");
2088
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-2SIPM4PW.js");
2089
2089
  const isOrchestrator = isOrchestratorThread2(thread);
2090
2090
  const injectedServers = await buildInjectedMcpServers({
2091
2091
  includeSideboard: true,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-M267JPEA.js";
10
10
  import {
11
11
  isOrchestratorThread
12
- } from "./chunk-IHSR7EVK.js";
12
+ } from "./chunk-R4JP32P5.js";
13
13
  import {
14
14
  applyAgentRunnerHeapEnv,
15
15
  applyNodeLaunch,
@@ -1767,7 +1767,7 @@ var claudeAdapter = {
1767
1767
  );
1768
1768
  }
1769
1769
  const mode = permissionMode(thread);
1770
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-EZVQPMWT.js");
1770
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-OJRXWXEA.js");
1771
1771
  const isOrchestrator = isOrchestratorThread2(thread);
1772
1772
  const injectedServers = await buildInjectedMcpServers({
1773
1773
  includeSideboard: true,
@@ -48,7 +48,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
48
48
  "- list_workspaces \u2014 registered repos (path + github slug when known)",
49
49
  "- list_board \u2014 Home Kanban of worktrees (New / Draft / Review / Merged; one card per checkout). Path to merge: no PR \u2192 draft PR \u2192 open PR \u2192 merged. Archive removes the card to Settings \u2192 History. Queued/running are activity on the card, not columns. Orchestration chats are not on the board. Filters: query, repoPath, kind, column, limit.",
50
50
  "- list_branches / list_prs / list_issues \u2014 pass repoPath from list_workspaces (issues: Linear, AbleTime MCP, or GitHub Issues)",
51
- "- linear_list_teams / linear_get_issue / linear_create_issue / linear_update_issue / linear_comment \u2014 Linear Account connection; call linear_list_teams for team key and workflow states; pass ENG-123 or uuid. If mutations fail with a scope error, Disconnect and Connect Linear in Account settings.",
51
+ "- linear_list_teams / linear_get_issue / linear_create_issue / linear_update_issue / linear_comment \u2014 Linear Account connection; call linear_list_teams for team key and workflow states; pass ENG-123 or uuid. linear_get_issue returns comments, relations, parent/children, and the rest of the issue metadata. If mutations fail with a scope error, Disconnect and Connect Linear in Account settings.",
52
52
  "- abletime_orientation / abletime_list_projects / abletime_list_tasks / abletime_search_tasks / abletime_get_task / abletime_create_task / abletime_ensure_task \u2014 AbleTime Account personal access token (hosted MCP). Call orientation first. If work has no task yet, abletime_ensure_task creates one to track against (or create_thread from the default branch does that automatically when AbleTime is the preferred issue source).",
53
53
  "- list_teams / slack_list_channels / slack_list_users / slack_search / slack_read / slack_post / slack_replies \u2014 Slack workspaces from Settings \u2192 Remote; pass team_id from list_teams",
54
54
  "- Optional connectors (Vercel, Supabase, PostHog, Sentry) in Settings \u2192 Connectors inject tokens into worktree agent env when connected. Prefer official CLIs (`vercel`, `supabase`, `sentry-cli`) with those env vars. PostHog has no first-class CLI \u2014 use the HTTP API (`POSTHOG_PERSONAL_API_KEY`). If a CLI is missing, the user can Install CLI on that row (not auto-installed on Connect). Do not add vendor MCPs or ask the user to paste tokens again. Git (`gh`) stays Settings \u2192 Git; issue tracking stays Settings \u2192 Issues; Slack stays Settings \u2192 Remote (Sideboard MCP).",
@@ -9,7 +9,7 @@ import {
9
9
  enrichWorkspacesWithGithub,
10
10
  ensureGlobalCoordinatorCwd,
11
11
  formatWorkspaceInventory
12
- } from "./chunk-67K3FRKR.js";
12
+ } from "./chunk-ZVYLEF72.js";
13
13
  import "./chunk-JTPDWTWJ.js";
14
14
  import "./chunk-B3SJXYIJ.js";
15
15
  import "./chunk-EUXOHTUK.js";
@@ -7,7 +7,7 @@ import {
7
7
  enrichWorkspacesWithGithub,
8
8
  ensureGlobalCoordinatorCwd,
9
9
  formatWorkspaceInventory
10
- } from "./chunk-SXPTL222.js";
10
+ } from "./chunk-EGDRPA4B.js";
11
11
  import "./chunk-YP3CSOZ6.js";
12
12
  import "./chunk-FKOIHGKV.js";
13
13
  import "./chunk-I77RYPOH.js";
@@ -17,8 +17,8 @@ import {
17
17
  orchestratorSessionPoisonedByBuiltins,
18
18
  slackCoordinatorSourceRef,
19
19
  takenTeamSlugsForOrchestration
20
- } from "./chunk-KNE3FZ46.js";
21
- import "./chunk-67K3FRKR.js";
20
+ } from "./chunk-N3VNOFXQ.js";
21
+ import "./chunk-ZVYLEF72.js";
22
22
  import "./chunk-JTPDWTWJ.js";
23
23
  import "./chunk-B3SJXYIJ.js";
24
24
  import "./chunk-EUXOHTUK.js";
@@ -15,8 +15,8 @@ import {
15
15
  orchestratorSessionPoisonedByBuiltins,
16
16
  slackCoordinatorSourceRef,
17
17
  takenTeamSlugsForOrchestration
18
- } from "./chunk-IHSR7EVK.js";
19
- import "./chunk-SXPTL222.js";
18
+ } from "./chunk-R4JP32P5.js";
19
+ import "./chunk-EGDRPA4B.js";
20
20
  import "./chunk-YP3CSOZ6.js";
21
21
  import "./chunk-FKOIHGKV.js";
22
22
  import "./chunk-I77RYPOH.js";
package/dist/index.cjs CHANGED
@@ -6484,7 +6484,7 @@ var init_coordinator_prompt = __esm({
6484
6484
  "- list_workspaces \u2014 registered repos (path + github slug when known)",
6485
6485
  "- list_board \u2014 Home Kanban of worktrees (New / Draft / Review / Merged; one card per checkout). Path to merge: no PR \u2192 draft PR \u2192 open PR \u2192 merged. Archive removes the card to Settings \u2192 History. Queued/running are activity on the card, not columns. Orchestration chats are not on the board. Filters: query, repoPath, kind, column, limit.",
6486
6486
  "- list_branches / list_prs / list_issues \u2014 pass repoPath from list_workspaces (issues: Linear, AbleTime MCP, or GitHub Issues)",
6487
- "- linear_list_teams / linear_get_issue / linear_create_issue / linear_update_issue / linear_comment \u2014 Linear Account connection; call linear_list_teams for team key and workflow states; pass ENG-123 or uuid. If mutations fail with a scope error, Disconnect and Connect Linear in Account settings.",
6487
+ "- linear_list_teams / linear_get_issue / linear_create_issue / linear_update_issue / linear_comment \u2014 Linear Account connection; call linear_list_teams for team key and workflow states; pass ENG-123 or uuid. linear_get_issue returns comments, relations, parent/children, and the rest of the issue metadata. If mutations fail with a scope error, Disconnect and Connect Linear in Account settings.",
6488
6488
  "- abletime_orientation / abletime_list_projects / abletime_list_tasks / abletime_search_tasks / abletime_get_task / abletime_create_task / abletime_ensure_task \u2014 AbleTime Account personal access token (hosted MCP). Call orientation first. If work has no task yet, abletime_ensure_task creates one to track against (or create_thread from the default branch does that automatically when AbleTime is the preferred issue source).",
6489
6489
  "- list_teams / slack_list_channels / slack_list_users / slack_search / slack_read / slack_post / slack_replies \u2014 Slack workspaces from Settings \u2192 Remote; pass team_id from list_teams",
6490
6490
  "- Optional connectors (Vercel, Supabase, PostHog, Sentry) in Settings \u2192 Connectors inject tokens into worktree agent env when connected. Prefer official CLIs (`vercel`, `supabase`, `sentry-cli`) with those env vars. PostHog has no first-class CLI \u2014 use the HTTP API (`POSTHOG_PERSONAL_API_KEY`). If a CLI is missing, the user can Install CLI on that row (not auto-installed on Connect). Do not add vendor MCPs or ask the user to paste tokens again. Git (`gh`) stays Settings \u2192 Git; issue tracking stays Settings \u2192 Issues; Slack stays Settings \u2192 Remote (Sideboard MCP).",
@@ -20583,6 +20583,7 @@ __export(index_exports, {
20583
20583
  findThreadForStackLayer: () => findThreadForStackLayer,
20584
20584
  fireSchedule: () => fireSchedule,
20585
20585
  flattenTurnInput: () => flattenTurnInput,
20586
+ flipLinearRelationType: () => flipLinearRelationType,
20586
20587
  forkChatTab: () => forkChatTab,
20587
20588
  forkMessageSlice: () => forkMessageSlice,
20588
20589
  forkThreadWorktree: () => forkThreadWorktree,
@@ -21381,6 +21382,12 @@ var LIST_ISSUE_FIELDS = `
21381
21382
  labels(first: 10) { nodes { name } }
21382
21383
  cycle { name number startsAt endsAt completedAt }
21383
21384
  `;
21385
+ var ISSUE_REF_FIELDS = `
21386
+ id
21387
+ identifier
21388
+ title
21389
+ url
21390
+ `;
21384
21391
  var ISSUE_FIELDS = `
21385
21392
  id
21386
21393
  identifier
@@ -21388,11 +21395,46 @@ var ISSUE_FIELDS = `
21388
21395
  description
21389
21396
  url
21390
21397
  priority
21398
+ estimate
21399
+ dueDate
21400
+ branchName
21401
+ createdAt
21402
+ updatedAt
21403
+ completedAt
21391
21404
  state { id name type }
21392
21405
  assignee { id name }
21406
+ creator { id name }
21393
21407
  team { id key name states(first: 50) { nodes { id name type } } }
21394
21408
  labels(first: 50) { nodes { name } }
21395
21409
  cycle { name number startsAt endsAt completedAt }
21410
+ project { id name }
21411
+ parent { ${ISSUE_REF_FIELDS} }
21412
+ children(first: 25) { nodes { ${ISSUE_REF_FIELDS} } }
21413
+ relations(first: 25) {
21414
+ nodes {
21415
+ type
21416
+ relatedIssue { ${ISSUE_REF_FIELDS} }
21417
+ }
21418
+ }
21419
+ inverseRelations(first: 25) {
21420
+ nodes {
21421
+ type
21422
+ issue { ${ISSUE_REF_FIELDS} }
21423
+ }
21424
+ }
21425
+ comments(first: 50) {
21426
+ nodes {
21427
+ id
21428
+ body
21429
+ url
21430
+ createdAt
21431
+ updatedAt
21432
+ user { id name }
21433
+ }
21434
+ }
21435
+ attachments(first: 20) {
21436
+ nodes { id title url subtitle }
21437
+ }
21396
21438
  `;
21397
21439
  var ASSIGNED_ISSUES_QUERY = `
21398
21440
  query SideboardAssignedIssues($first: Int!) {
@@ -21520,6 +21562,82 @@ function mapCycle(node) {
21520
21562
  isActive: linearCycleIsActive(node)
21521
21563
  };
21522
21564
  }
21565
+ function mapUser(node) {
21566
+ if (!node?.id && !node?.name) return void 0;
21567
+ return {
21568
+ id: String(node.id ?? ""),
21569
+ name: String(node.name ?? "")
21570
+ };
21571
+ }
21572
+ function mapIssueRef(node) {
21573
+ if (!node?.id && !node?.identifier) return void 0;
21574
+ return {
21575
+ id: String(node.id ?? node.identifier ?? ""),
21576
+ identifier: String(node.identifier ?? node.id ?? ""),
21577
+ title: String(node.title ?? ""),
21578
+ url: String(node.url ?? "")
21579
+ };
21580
+ }
21581
+ function flipLinearRelationType(type) {
21582
+ switch (type) {
21583
+ case "blocks":
21584
+ return "blockedBy";
21585
+ case "blockedBy":
21586
+ return "blocks";
21587
+ case "duplicate":
21588
+ return "duplicateOf";
21589
+ case "duplicateOf":
21590
+ return "duplicate";
21591
+ default:
21592
+ return type;
21593
+ }
21594
+ }
21595
+ function mapRelations(node) {
21596
+ const out = [];
21597
+ for (const rel of node.relations?.nodes ?? []) {
21598
+ const issue = mapIssueRef(rel.relatedIssue);
21599
+ if (!issue) continue;
21600
+ out.push({ type: String(rel.type ?? "related"), issue });
21601
+ }
21602
+ for (const rel of node.inverseRelations?.nodes ?? []) {
21603
+ const issue = mapIssueRef(rel.issue);
21604
+ if (!issue) continue;
21605
+ out.push({ type: flipLinearRelationType(String(rel.type ?? "related")), issue });
21606
+ }
21607
+ return out;
21608
+ }
21609
+ function mapComments(node) {
21610
+ const out = [];
21611
+ for (const comment of node.comments?.nodes ?? []) {
21612
+ const id = String(comment.id ?? "");
21613
+ const body = String(comment.body ?? "");
21614
+ if (!id && !body) continue;
21615
+ out.push({
21616
+ id,
21617
+ body,
21618
+ url: comment.url?.trim() || void 0,
21619
+ createdAt: comment.createdAt?.trim() || void 0,
21620
+ updatedAt: comment.updatedAt?.trim() || void 0,
21621
+ user: mapUser(comment.user)
21622
+ });
21623
+ }
21624
+ return out;
21625
+ }
21626
+ function mapAttachments(node) {
21627
+ const out = [];
21628
+ for (const attachment of node.attachments?.nodes ?? []) {
21629
+ const id = String(attachment.id ?? "");
21630
+ const url = String(attachment.url ?? "").trim();
21631
+ if (!id && !url) continue;
21632
+ out.push({
21633
+ id,
21634
+ title: String(attachment.title ?? ""),
21635
+ url,
21636
+ subtitle: attachment.subtitle?.trim() || void 0
21637
+ });
21638
+ }
21639
+ return out;
21640
+ }
21523
21641
  function mapIssue(node) {
21524
21642
  const team = node.team;
21525
21643
  return {
@@ -21529,16 +21647,35 @@ function mapIssue(node) {
21529
21647
  url: String(node.url ?? ""),
21530
21648
  description: node.description?.trim() || void 0,
21531
21649
  priority: typeof node.priority === "number" ? node.priority : void 0,
21650
+ estimate: typeof node.estimate === "number" ? node.estimate : void 0,
21651
+ dueDate: node.dueDate?.trim() || void 0,
21652
+ branchName: node.branchName?.trim() || void 0,
21653
+ createdAt: node.createdAt?.trim() || void 0,
21654
+ updatedAt: node.updatedAt?.trim() || void 0,
21655
+ completedAt: node.completedAt?.trim() || void 0,
21532
21656
  state: mapState(node.state),
21533
- assignee: node.assignee?.id ? { id: String(node.assignee.id), name: String(node.assignee.name ?? "") } : void 0,
21657
+ assignee: mapUser(node.assignee),
21658
+ creator: mapUser(node.creator),
21534
21659
  team: team?.id ? {
21535
21660
  id: String(team.id),
21536
21661
  key: String(team.key ?? ""),
21537
21662
  name: String(team.name ?? ""),
21538
- states: (team.states?.nodes ?? []).map((s) => mapState(s)).filter((s) => Boolean(s))
21663
+ states: (team.states?.nodes ?? []).flatMap((s) => {
21664
+ const state = mapState(s);
21665
+ return state ? [state] : [];
21666
+ })
21539
21667
  } : void 0,
21540
21668
  labels: (node.labels?.nodes ?? []).map((l) => l.name).filter((n) => Boolean(n)),
21541
- cycle: mapCycle(node.cycle)
21669
+ cycle: mapCycle(node.cycle),
21670
+ project: node.project?.id ? { id: String(node.project.id), name: String(node.project.name ?? "") } : void 0,
21671
+ parent: mapIssueRef(node.parent),
21672
+ children: (node.children?.nodes ?? []).flatMap((child) => {
21673
+ const ref = mapIssueRef(child);
21674
+ return ref ? [ref] : [];
21675
+ }),
21676
+ relations: mapRelations(node),
21677
+ comments: mapComments(node),
21678
+ attachments: mapAttachments(node)
21542
21679
  };
21543
21680
  }
21544
21681
  function toIssueInfo(issue) {
@@ -21560,7 +21697,10 @@ function mapTeam(node) {
21560
21697
  id: String(node.id ?? ""),
21561
21698
  key: String(node.key ?? ""),
21562
21699
  name: String(node.name ?? ""),
21563
- states: (node.states?.nodes ?? []).map((s) => mapState(s)).filter((s) => Boolean(s))
21700
+ states: (node.states?.nodes ?? []).flatMap((s) => {
21701
+ const state = mapState(s);
21702
+ return state ? [state] : [];
21703
+ })
21564
21704
  };
21565
21705
  }
21566
21706
  function resolveLinearTeam(teams, team) {
@@ -22940,7 +23080,7 @@ function registerLinearTools(server) {
22940
23080
  );
22941
23081
  server.tool(
22942
23082
  "linear_get_issue",
22943
- "Get a Linear issue by uuid or identifier (ENG-123).",
23083
+ "Get a Linear issue by uuid or identifier (ENG-123). Returns description, comments, relations (blocks/blockedBy/related/duplicate), parent/children, project, cycle, labels, and other metadata.",
22944
23084
  { id: import_zod3.z.string() },
22945
23085
  async ({ id }) => {
22946
23086
  try {
@@ -27271,6 +27411,7 @@ init_outbound_watch();
27271
27411
  findThreadForStackLayer,
27272
27412
  fireSchedule,
27273
27413
  flattenTurnInput,
27414
+ flipLinearRelationType,
27274
27415
  forkChatTab,
27275
27416
  forkMessageSlice,
27276
27417
  forkThreadWorktree,