@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.
- package/dist/{agents-YVETHB2R.js → agents-DUF4Q2ZI.js} +3 -3
- package/dist/{agents-N3KMRQUZ.js → agents-INCTFWKA.js} +3 -3
- package/dist/{chunk-JHZ6HGRI.js → chunk-3QRGCKYL.js} +1 -1
- package/dist/{chunk-KZG47SZP.js → chunk-5MS2XTNV.js} +11 -11
- package/dist/{chunk-ZZBN2MR7.js → chunk-CTXQHSTY.js} +11 -11
- package/dist/{chunk-SXPTL222.js → chunk-EGDRPA4B.js} +1 -1
- package/dist/{chunk-KNE3FZ46.js → chunk-N3VNOFXQ.js} +1 -1
- package/dist/{chunk-JW436RTA.js → chunk-Q62SDB53.js} +1 -1
- package/dist/{chunk-IHSR7EVK.js → chunk-R4JP32P5.js} +1 -1
- package/dist/{chunk-4RYRNJPN.js → chunk-XOKHXFFX.js} +2 -2
- package/dist/{chunk-WWH4NNBH.js → chunk-YQRBNOIW.js} +2 -2
- package/dist/{chunk-67K3FRKR.js → chunk-ZVYLEF72.js} +1 -1
- package/dist/{coordinator-prompt-2EOR35TP.js → coordinator-prompt-5GXGBGEZ.js} +1 -1
- package/dist/{coordinator-prompt-6EPVHVGJ.js → coordinator-prompt-ZWBMAIWA.js} +1 -1
- package/dist/{global-workspace-PANZGRUS.js → global-workspace-2SIPM4PW.js} +2 -2
- package/dist/{global-workspace-EZVQPMWT.js → global-workspace-OJRXWXEA.js} +2 -2
- package/dist/index.cjs +147 -6
- package/dist/index.d.cts +50 -1
- package/dist/index.d.ts +50 -1
- package/dist/index.js +150 -10
- package/dist/mcp/run-stdio.cjs +145 -6
- package/dist/mcp/run-stdio.js +149 -10
- package/dist/{orchestrator-KWV2PPML.js → orchestrator-NWIU5TJP.js} +5 -5
- package/dist/{orchestrator-T35BJZWY.js → orchestrator-OVYITCO6.js} +5 -5
- package/dist/{workspaces-ZJATBC4A.js → workspaces-3NUUZTQK.js} +3 -3
- package/dist/{workspaces-DWERPUQJ.js → workspaces-UUJNOO4T.js} +3 -3
- package/package.json +1 -1
package/dist/mcp/run-stdio.cjs
CHANGED
|
@@ -6615,7 +6615,7 @@ var init_coordinator_prompt = __esm({
|
|
|
6615
6615
|
"- list_workspaces \u2014 registered repos (path + github slug when known)",
|
|
6616
6616
|
"- 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.",
|
|
6617
6617
|
"- list_branches / list_prs / list_issues \u2014 pass repoPath from list_workspaces (issues: Linear, AbleTime MCP, or GitHub Issues)",
|
|
6618
|
-
"- 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.",
|
|
6618
|
+
"- 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.",
|
|
6619
6619
|
"- 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).",
|
|
6620
6620
|
"- 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",
|
|
6621
6621
|
"- 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).",
|
|
@@ -19611,6 +19611,12 @@ var LIST_ISSUE_FIELDS = `
|
|
|
19611
19611
|
labels(first: 10) { nodes { name } }
|
|
19612
19612
|
cycle { name number startsAt endsAt completedAt }
|
|
19613
19613
|
`;
|
|
19614
|
+
var ISSUE_REF_FIELDS = `
|
|
19615
|
+
id
|
|
19616
|
+
identifier
|
|
19617
|
+
title
|
|
19618
|
+
url
|
|
19619
|
+
`;
|
|
19614
19620
|
var ISSUE_FIELDS = `
|
|
19615
19621
|
id
|
|
19616
19622
|
identifier
|
|
@@ -19618,11 +19624,46 @@ var ISSUE_FIELDS = `
|
|
|
19618
19624
|
description
|
|
19619
19625
|
url
|
|
19620
19626
|
priority
|
|
19627
|
+
estimate
|
|
19628
|
+
dueDate
|
|
19629
|
+
branchName
|
|
19630
|
+
createdAt
|
|
19631
|
+
updatedAt
|
|
19632
|
+
completedAt
|
|
19621
19633
|
state { id name type }
|
|
19622
19634
|
assignee { id name }
|
|
19635
|
+
creator { id name }
|
|
19623
19636
|
team { id key name states(first: 50) { nodes { id name type } } }
|
|
19624
19637
|
labels(first: 50) { nodes { name } }
|
|
19625
19638
|
cycle { name number startsAt endsAt completedAt }
|
|
19639
|
+
project { id name }
|
|
19640
|
+
parent { ${ISSUE_REF_FIELDS} }
|
|
19641
|
+
children(first: 25) { nodes { ${ISSUE_REF_FIELDS} } }
|
|
19642
|
+
relations(first: 25) {
|
|
19643
|
+
nodes {
|
|
19644
|
+
type
|
|
19645
|
+
relatedIssue { ${ISSUE_REF_FIELDS} }
|
|
19646
|
+
}
|
|
19647
|
+
}
|
|
19648
|
+
inverseRelations(first: 25) {
|
|
19649
|
+
nodes {
|
|
19650
|
+
type
|
|
19651
|
+
issue { ${ISSUE_REF_FIELDS} }
|
|
19652
|
+
}
|
|
19653
|
+
}
|
|
19654
|
+
comments(first: 50) {
|
|
19655
|
+
nodes {
|
|
19656
|
+
id
|
|
19657
|
+
body
|
|
19658
|
+
url
|
|
19659
|
+
createdAt
|
|
19660
|
+
updatedAt
|
|
19661
|
+
user { id name }
|
|
19662
|
+
}
|
|
19663
|
+
}
|
|
19664
|
+
attachments(first: 20) {
|
|
19665
|
+
nodes { id title url subtitle }
|
|
19666
|
+
}
|
|
19626
19667
|
`;
|
|
19627
19668
|
var ASSIGNED_ISSUES_QUERY = `
|
|
19628
19669
|
query SideboardAssignedIssues($first: Int!) {
|
|
@@ -19750,6 +19791,82 @@ function mapCycle(node) {
|
|
|
19750
19791
|
isActive: linearCycleIsActive(node)
|
|
19751
19792
|
};
|
|
19752
19793
|
}
|
|
19794
|
+
function mapUser(node) {
|
|
19795
|
+
if (!node?.id && !node?.name) return void 0;
|
|
19796
|
+
return {
|
|
19797
|
+
id: String(node.id ?? ""),
|
|
19798
|
+
name: String(node.name ?? "")
|
|
19799
|
+
};
|
|
19800
|
+
}
|
|
19801
|
+
function mapIssueRef(node) {
|
|
19802
|
+
if (!node?.id && !node?.identifier) return void 0;
|
|
19803
|
+
return {
|
|
19804
|
+
id: String(node.id ?? node.identifier ?? ""),
|
|
19805
|
+
identifier: String(node.identifier ?? node.id ?? ""),
|
|
19806
|
+
title: String(node.title ?? ""),
|
|
19807
|
+
url: String(node.url ?? "")
|
|
19808
|
+
};
|
|
19809
|
+
}
|
|
19810
|
+
function flipLinearRelationType(type) {
|
|
19811
|
+
switch (type) {
|
|
19812
|
+
case "blocks":
|
|
19813
|
+
return "blockedBy";
|
|
19814
|
+
case "blockedBy":
|
|
19815
|
+
return "blocks";
|
|
19816
|
+
case "duplicate":
|
|
19817
|
+
return "duplicateOf";
|
|
19818
|
+
case "duplicateOf":
|
|
19819
|
+
return "duplicate";
|
|
19820
|
+
default:
|
|
19821
|
+
return type;
|
|
19822
|
+
}
|
|
19823
|
+
}
|
|
19824
|
+
function mapRelations(node) {
|
|
19825
|
+
const out = [];
|
|
19826
|
+
for (const rel of node.relations?.nodes ?? []) {
|
|
19827
|
+
const issue = mapIssueRef(rel.relatedIssue);
|
|
19828
|
+
if (!issue) continue;
|
|
19829
|
+
out.push({ type: String(rel.type ?? "related"), issue });
|
|
19830
|
+
}
|
|
19831
|
+
for (const rel of node.inverseRelations?.nodes ?? []) {
|
|
19832
|
+
const issue = mapIssueRef(rel.issue);
|
|
19833
|
+
if (!issue) continue;
|
|
19834
|
+
out.push({ type: flipLinearRelationType(String(rel.type ?? "related")), issue });
|
|
19835
|
+
}
|
|
19836
|
+
return out;
|
|
19837
|
+
}
|
|
19838
|
+
function mapComments(node) {
|
|
19839
|
+
const out = [];
|
|
19840
|
+
for (const comment of node.comments?.nodes ?? []) {
|
|
19841
|
+
const id = String(comment.id ?? "");
|
|
19842
|
+
const body = String(comment.body ?? "");
|
|
19843
|
+
if (!id && !body) continue;
|
|
19844
|
+
out.push({
|
|
19845
|
+
id,
|
|
19846
|
+
body,
|
|
19847
|
+
url: comment.url?.trim() || void 0,
|
|
19848
|
+
createdAt: comment.createdAt?.trim() || void 0,
|
|
19849
|
+
updatedAt: comment.updatedAt?.trim() || void 0,
|
|
19850
|
+
user: mapUser(comment.user)
|
|
19851
|
+
});
|
|
19852
|
+
}
|
|
19853
|
+
return out;
|
|
19854
|
+
}
|
|
19855
|
+
function mapAttachments(node) {
|
|
19856
|
+
const out = [];
|
|
19857
|
+
for (const attachment of node.attachments?.nodes ?? []) {
|
|
19858
|
+
const id = String(attachment.id ?? "");
|
|
19859
|
+
const url = String(attachment.url ?? "").trim();
|
|
19860
|
+
if (!id && !url) continue;
|
|
19861
|
+
out.push({
|
|
19862
|
+
id,
|
|
19863
|
+
title: String(attachment.title ?? ""),
|
|
19864
|
+
url,
|
|
19865
|
+
subtitle: attachment.subtitle?.trim() || void 0
|
|
19866
|
+
});
|
|
19867
|
+
}
|
|
19868
|
+
return out;
|
|
19869
|
+
}
|
|
19753
19870
|
function mapIssue(node) {
|
|
19754
19871
|
const team = node.team;
|
|
19755
19872
|
return {
|
|
@@ -19759,16 +19876,35 @@ function mapIssue(node) {
|
|
|
19759
19876
|
url: String(node.url ?? ""),
|
|
19760
19877
|
description: node.description?.trim() || void 0,
|
|
19761
19878
|
priority: typeof node.priority === "number" ? node.priority : void 0,
|
|
19879
|
+
estimate: typeof node.estimate === "number" ? node.estimate : void 0,
|
|
19880
|
+
dueDate: node.dueDate?.trim() || void 0,
|
|
19881
|
+
branchName: node.branchName?.trim() || void 0,
|
|
19882
|
+
createdAt: node.createdAt?.trim() || void 0,
|
|
19883
|
+
updatedAt: node.updatedAt?.trim() || void 0,
|
|
19884
|
+
completedAt: node.completedAt?.trim() || void 0,
|
|
19762
19885
|
state: mapState(node.state),
|
|
19763
|
-
assignee:
|
|
19886
|
+
assignee: mapUser(node.assignee),
|
|
19887
|
+
creator: mapUser(node.creator),
|
|
19764
19888
|
team: team?.id ? {
|
|
19765
19889
|
id: String(team.id),
|
|
19766
19890
|
key: String(team.key ?? ""),
|
|
19767
19891
|
name: String(team.name ?? ""),
|
|
19768
|
-
states: (team.states?.nodes ?? []).
|
|
19892
|
+
states: (team.states?.nodes ?? []).flatMap((s) => {
|
|
19893
|
+
const state = mapState(s);
|
|
19894
|
+
return state ? [state] : [];
|
|
19895
|
+
})
|
|
19769
19896
|
} : void 0,
|
|
19770
19897
|
labels: (node.labels?.nodes ?? []).map((l) => l.name).filter((n) => Boolean(n)),
|
|
19771
|
-
cycle: mapCycle(node.cycle)
|
|
19898
|
+
cycle: mapCycle(node.cycle),
|
|
19899
|
+
project: node.project?.id ? { id: String(node.project.id), name: String(node.project.name ?? "") } : void 0,
|
|
19900
|
+
parent: mapIssueRef(node.parent),
|
|
19901
|
+
children: (node.children?.nodes ?? []).flatMap((child) => {
|
|
19902
|
+
const ref = mapIssueRef(child);
|
|
19903
|
+
return ref ? [ref] : [];
|
|
19904
|
+
}),
|
|
19905
|
+
relations: mapRelations(node),
|
|
19906
|
+
comments: mapComments(node),
|
|
19907
|
+
attachments: mapAttachments(node)
|
|
19772
19908
|
};
|
|
19773
19909
|
}
|
|
19774
19910
|
function toIssueInfo(issue) {
|
|
@@ -19790,7 +19926,10 @@ function mapTeam(node) {
|
|
|
19790
19926
|
id: String(node.id ?? ""),
|
|
19791
19927
|
key: String(node.key ?? ""),
|
|
19792
19928
|
name: String(node.name ?? ""),
|
|
19793
|
-
states: (node.states?.nodes ?? []).
|
|
19929
|
+
states: (node.states?.nodes ?? []).flatMap((s) => {
|
|
19930
|
+
const state = mapState(s);
|
|
19931
|
+
return state ? [state] : [];
|
|
19932
|
+
})
|
|
19794
19933
|
};
|
|
19795
19934
|
}
|
|
19796
19935
|
function resolveLinearTeam(teams, team) {
|
|
@@ -20760,7 +20899,7 @@ function registerLinearTools(server) {
|
|
|
20760
20899
|
);
|
|
20761
20900
|
server.tool(
|
|
20762
20901
|
"linear_get_issue",
|
|
20763
|
-
"Get a Linear issue by uuid or identifier (ENG-123).",
|
|
20902
|
+
"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.",
|
|
20764
20903
|
{ id: import_zod3.z.string() },
|
|
20765
20904
|
async ({ id }) => {
|
|
20766
20905
|
try {
|
package/dist/mcp/run-stdio.js
CHANGED
|
@@ -32,14 +32,14 @@ import {
|
|
|
32
32
|
slackTokenFor,
|
|
33
33
|
syncBoardPins,
|
|
34
34
|
updateSchedule
|
|
35
|
-
} from "../chunk-
|
|
35
|
+
} from "../chunk-5MS2XTNV.js";
|
|
36
36
|
import {
|
|
37
37
|
listModelsForAgent,
|
|
38
38
|
sideboardMcpProfile
|
|
39
|
-
} from "../chunk-
|
|
39
|
+
} from "../chunk-XOKHXFFX.js";
|
|
40
40
|
import "../chunk-ED4UPEJX.js";
|
|
41
41
|
import "../chunk-S42XV45P.js";
|
|
42
|
-
import "../chunk-
|
|
42
|
+
import "../chunk-Q62SDB53.js";
|
|
43
43
|
import {
|
|
44
44
|
createAbleTimeTask,
|
|
45
45
|
ensureAbleTimeTask,
|
|
@@ -59,8 +59,8 @@ import "../chunk-KLBOWJ74.js";
|
|
|
59
59
|
import {
|
|
60
60
|
GLOBAL_WORKSPACE_ID,
|
|
61
61
|
isCloudCoordinatorThread
|
|
62
|
-
} from "../chunk-
|
|
63
|
-
import "../chunk-
|
|
62
|
+
} from "../chunk-N3VNOFXQ.js";
|
|
63
|
+
import "../chunk-ZVYLEF72.js";
|
|
64
64
|
import {
|
|
65
65
|
canonicalizeRepoPath,
|
|
66
66
|
listBranches,
|
|
@@ -204,6 +204,12 @@ var LIST_ISSUE_FIELDS = `
|
|
|
204
204
|
labels(first: 10) { nodes { name } }
|
|
205
205
|
cycle { name number startsAt endsAt completedAt }
|
|
206
206
|
`;
|
|
207
|
+
var ISSUE_REF_FIELDS = `
|
|
208
|
+
id
|
|
209
|
+
identifier
|
|
210
|
+
title
|
|
211
|
+
url
|
|
212
|
+
`;
|
|
207
213
|
var ISSUE_FIELDS = `
|
|
208
214
|
id
|
|
209
215
|
identifier
|
|
@@ -211,11 +217,46 @@ var ISSUE_FIELDS = `
|
|
|
211
217
|
description
|
|
212
218
|
url
|
|
213
219
|
priority
|
|
220
|
+
estimate
|
|
221
|
+
dueDate
|
|
222
|
+
branchName
|
|
223
|
+
createdAt
|
|
224
|
+
updatedAt
|
|
225
|
+
completedAt
|
|
214
226
|
state { id name type }
|
|
215
227
|
assignee { id name }
|
|
228
|
+
creator { id name }
|
|
216
229
|
team { id key name states(first: 50) { nodes { id name type } } }
|
|
217
230
|
labels(first: 50) { nodes { name } }
|
|
218
231
|
cycle { name number startsAt endsAt completedAt }
|
|
232
|
+
project { id name }
|
|
233
|
+
parent { ${ISSUE_REF_FIELDS} }
|
|
234
|
+
children(first: 25) { nodes { ${ISSUE_REF_FIELDS} } }
|
|
235
|
+
relations(first: 25) {
|
|
236
|
+
nodes {
|
|
237
|
+
type
|
|
238
|
+
relatedIssue { ${ISSUE_REF_FIELDS} }
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
inverseRelations(first: 25) {
|
|
242
|
+
nodes {
|
|
243
|
+
type
|
|
244
|
+
issue { ${ISSUE_REF_FIELDS} }
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
comments(first: 50) {
|
|
248
|
+
nodes {
|
|
249
|
+
id
|
|
250
|
+
body
|
|
251
|
+
url
|
|
252
|
+
createdAt
|
|
253
|
+
updatedAt
|
|
254
|
+
user { id name }
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
attachments(first: 20) {
|
|
258
|
+
nodes { id title url subtitle }
|
|
259
|
+
}
|
|
219
260
|
`;
|
|
220
261
|
var ASSIGNED_ISSUES_QUERY = `
|
|
221
262
|
query SideboardAssignedIssues($first: Int!) {
|
|
@@ -343,6 +384,82 @@ function mapCycle(node) {
|
|
|
343
384
|
isActive: linearCycleIsActive(node)
|
|
344
385
|
};
|
|
345
386
|
}
|
|
387
|
+
function mapUser(node) {
|
|
388
|
+
if (!node?.id && !node?.name) return void 0;
|
|
389
|
+
return {
|
|
390
|
+
id: String(node.id ?? ""),
|
|
391
|
+
name: String(node.name ?? "")
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
function mapIssueRef(node) {
|
|
395
|
+
if (!node?.id && !node?.identifier) return void 0;
|
|
396
|
+
return {
|
|
397
|
+
id: String(node.id ?? node.identifier ?? ""),
|
|
398
|
+
identifier: String(node.identifier ?? node.id ?? ""),
|
|
399
|
+
title: String(node.title ?? ""),
|
|
400
|
+
url: String(node.url ?? "")
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
function flipLinearRelationType(type) {
|
|
404
|
+
switch (type) {
|
|
405
|
+
case "blocks":
|
|
406
|
+
return "blockedBy";
|
|
407
|
+
case "blockedBy":
|
|
408
|
+
return "blocks";
|
|
409
|
+
case "duplicate":
|
|
410
|
+
return "duplicateOf";
|
|
411
|
+
case "duplicateOf":
|
|
412
|
+
return "duplicate";
|
|
413
|
+
default:
|
|
414
|
+
return type;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
function mapRelations(node) {
|
|
418
|
+
const out = [];
|
|
419
|
+
for (const rel of node.relations?.nodes ?? []) {
|
|
420
|
+
const issue = mapIssueRef(rel.relatedIssue);
|
|
421
|
+
if (!issue) continue;
|
|
422
|
+
out.push({ type: String(rel.type ?? "related"), issue });
|
|
423
|
+
}
|
|
424
|
+
for (const rel of node.inverseRelations?.nodes ?? []) {
|
|
425
|
+
const issue = mapIssueRef(rel.issue);
|
|
426
|
+
if (!issue) continue;
|
|
427
|
+
out.push({ type: flipLinearRelationType(String(rel.type ?? "related")), issue });
|
|
428
|
+
}
|
|
429
|
+
return out;
|
|
430
|
+
}
|
|
431
|
+
function mapComments(node) {
|
|
432
|
+
const out = [];
|
|
433
|
+
for (const comment of node.comments?.nodes ?? []) {
|
|
434
|
+
const id = String(comment.id ?? "");
|
|
435
|
+
const body = String(comment.body ?? "");
|
|
436
|
+
if (!id && !body) continue;
|
|
437
|
+
out.push({
|
|
438
|
+
id,
|
|
439
|
+
body,
|
|
440
|
+
url: comment.url?.trim() || void 0,
|
|
441
|
+
createdAt: comment.createdAt?.trim() || void 0,
|
|
442
|
+
updatedAt: comment.updatedAt?.trim() || void 0,
|
|
443
|
+
user: mapUser(comment.user)
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
return out;
|
|
447
|
+
}
|
|
448
|
+
function mapAttachments(node) {
|
|
449
|
+
const out = [];
|
|
450
|
+
for (const attachment of node.attachments?.nodes ?? []) {
|
|
451
|
+
const id = String(attachment.id ?? "");
|
|
452
|
+
const url = String(attachment.url ?? "").trim();
|
|
453
|
+
if (!id && !url) continue;
|
|
454
|
+
out.push({
|
|
455
|
+
id,
|
|
456
|
+
title: String(attachment.title ?? ""),
|
|
457
|
+
url,
|
|
458
|
+
subtitle: attachment.subtitle?.trim() || void 0
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
return out;
|
|
462
|
+
}
|
|
346
463
|
function mapIssue(node) {
|
|
347
464
|
const team = node.team;
|
|
348
465
|
return {
|
|
@@ -352,16 +469,35 @@ function mapIssue(node) {
|
|
|
352
469
|
url: String(node.url ?? ""),
|
|
353
470
|
description: node.description?.trim() || void 0,
|
|
354
471
|
priority: typeof node.priority === "number" ? node.priority : void 0,
|
|
472
|
+
estimate: typeof node.estimate === "number" ? node.estimate : void 0,
|
|
473
|
+
dueDate: node.dueDate?.trim() || void 0,
|
|
474
|
+
branchName: node.branchName?.trim() || void 0,
|
|
475
|
+
createdAt: node.createdAt?.trim() || void 0,
|
|
476
|
+
updatedAt: node.updatedAt?.trim() || void 0,
|
|
477
|
+
completedAt: node.completedAt?.trim() || void 0,
|
|
355
478
|
state: mapState(node.state),
|
|
356
|
-
assignee:
|
|
479
|
+
assignee: mapUser(node.assignee),
|
|
480
|
+
creator: mapUser(node.creator),
|
|
357
481
|
team: team?.id ? {
|
|
358
482
|
id: String(team.id),
|
|
359
483
|
key: String(team.key ?? ""),
|
|
360
484
|
name: String(team.name ?? ""),
|
|
361
|
-
states: (team.states?.nodes ?? []).
|
|
485
|
+
states: (team.states?.nodes ?? []).flatMap((s) => {
|
|
486
|
+
const state = mapState(s);
|
|
487
|
+
return state ? [state] : [];
|
|
488
|
+
})
|
|
362
489
|
} : void 0,
|
|
363
490
|
labels: (node.labels?.nodes ?? []).map((l) => l.name).filter((n) => Boolean(n)),
|
|
364
|
-
cycle: mapCycle(node.cycle)
|
|
491
|
+
cycle: mapCycle(node.cycle),
|
|
492
|
+
project: node.project?.id ? { id: String(node.project.id), name: String(node.project.name ?? "") } : void 0,
|
|
493
|
+
parent: mapIssueRef(node.parent),
|
|
494
|
+
children: (node.children?.nodes ?? []).flatMap((child) => {
|
|
495
|
+
const ref = mapIssueRef(child);
|
|
496
|
+
return ref ? [ref] : [];
|
|
497
|
+
}),
|
|
498
|
+
relations: mapRelations(node),
|
|
499
|
+
comments: mapComments(node),
|
|
500
|
+
attachments: mapAttachments(node)
|
|
365
501
|
};
|
|
366
502
|
}
|
|
367
503
|
function toIssueInfo(issue) {
|
|
@@ -383,7 +519,10 @@ function mapTeam(node) {
|
|
|
383
519
|
id: String(node.id ?? ""),
|
|
384
520
|
key: String(node.key ?? ""),
|
|
385
521
|
name: String(node.name ?? ""),
|
|
386
|
-
states: (node.states?.nodes ?? []).
|
|
522
|
+
states: (node.states?.nodes ?? []).flatMap((s) => {
|
|
523
|
+
const state = mapState(s);
|
|
524
|
+
return state ? [state] : [];
|
|
525
|
+
})
|
|
387
526
|
};
|
|
388
527
|
}
|
|
389
528
|
function resolveLinearTeam(teams, team) {
|
|
@@ -1336,7 +1475,7 @@ function registerLinearTools(server) {
|
|
|
1336
1475
|
);
|
|
1337
1476
|
server.tool(
|
|
1338
1477
|
"linear_get_issue",
|
|
1339
|
-
"Get a Linear issue by uuid or identifier (ENG-123).",
|
|
1478
|
+
"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.",
|
|
1340
1479
|
{ id: z3.string() },
|
|
1341
1480
|
async ({ id }) => {
|
|
1342
1481
|
try {
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
isPidAlive,
|
|
5
5
|
startOrchestration,
|
|
6
6
|
waitForPidExit
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-CTXQHSTY.js";
|
|
8
|
+
import "./chunk-YQRBNOIW.js";
|
|
9
9
|
import "./chunk-KBWND62T.js";
|
|
10
10
|
import "./chunk-M267JPEA.js";
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-3QRGCKYL.js";
|
|
12
|
+
import "./chunk-R4JP32P5.js";
|
|
13
|
+
import "./chunk-EGDRPA4B.js";
|
|
14
14
|
import "./chunk-ELBYOGVA.js";
|
|
15
15
|
import "./chunk-QTUESPAW.js";
|
|
16
16
|
import "./chunk-AXQ4ZWHK.js";
|
|
@@ -6,16 +6,16 @@ import {
|
|
|
6
6
|
isPidAlive,
|
|
7
7
|
startOrchestration,
|
|
8
8
|
waitForPidExit
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-5MS2XTNV.js";
|
|
10
|
+
import "./chunk-XOKHXFFX.js";
|
|
11
11
|
import "./chunk-ED4UPEJX.js";
|
|
12
12
|
import "./chunk-S42XV45P.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-Q62SDB53.js";
|
|
14
14
|
import "./chunk-6GN5WPYZ.js";
|
|
15
15
|
import "./chunk-N5PM7HGQ.js";
|
|
16
16
|
import "./chunk-KLBOWJ74.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-N3VNOFXQ.js";
|
|
18
|
+
import "./chunk-ZVYLEF72.js";
|
|
19
19
|
import "./chunk-JTPDWTWJ.js";
|
|
20
20
|
import "./chunk-B3SJXYIJ.js";
|
|
21
21
|
import "./chunk-EUXOHTUK.js";
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
listWorkspaces,
|
|
5
5
|
removeWorkspace,
|
|
6
6
|
syncWorkspacesFromThreads
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-3QRGCKYL.js";
|
|
8
|
+
import "./chunk-R4JP32P5.js";
|
|
9
|
+
import "./chunk-EGDRPA4B.js";
|
|
10
10
|
import "./chunk-YP3CSOZ6.js";
|
|
11
11
|
import "./chunk-FKOIHGKV.js";
|
|
12
12
|
import "./chunk-I77RYPOH.js";
|
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
listWorkspaces,
|
|
7
7
|
removeWorkspace,
|
|
8
8
|
syncWorkspacesFromThreads
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-Q62SDB53.js";
|
|
10
|
+
import "./chunk-N3VNOFXQ.js";
|
|
11
|
+
import "./chunk-ZVYLEF72.js";
|
|
12
12
|
import "./chunk-JTPDWTWJ.js";
|
|
13
13
|
import "./chunk-B3SJXYIJ.js";
|
|
14
14
|
import "./chunk-EUXOHTUK.js";
|