@sideboard-ai/core 0.1.188 → 0.1.189
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/{chunk-72FO6OLT.js → chunk-LE5OZCKB.js} +3 -3
- package/dist/{chunk-TBG2Z3ZV.js → chunk-U6FCBOS7.js} +3 -3
- package/dist/index.cjs +97 -12
- package/dist/index.d.cts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +95 -12
- package/dist/mcp/run-stdio.cjs +93 -12
- package/dist/mcp/run-stdio.js +93 -12
- package/dist/{orchestrator-ZMXSPFSF.js → orchestrator-CWBYGHAT.js} +1 -1
- package/dist/{orchestrator-7A66YINC.js → orchestrator-EVDOHS2S.js} +1 -1
- package/package.json +1 -1
|
@@ -402,7 +402,7 @@ async function continueSourceThread(threadId, prompt) {
|
|
|
402
402
|
await continueOnReply(threadId, prompt);
|
|
403
403
|
return;
|
|
404
404
|
}
|
|
405
|
-
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-
|
|
405
|
+
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-EVDOHS2S.js");
|
|
406
406
|
await getOrchestrator2().send(threadId, prompt);
|
|
407
407
|
} catch {
|
|
408
408
|
}
|
|
@@ -5972,7 +5972,7 @@ function formatIssueToolsDirective(opts) {
|
|
|
5972
5972
|
];
|
|
5973
5973
|
if (opts.linear) {
|
|
5974
5974
|
lines.push(
|
|
5975
|
-
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
5975
|
+
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state, cycle), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
5976
5976
|
);
|
|
5977
5977
|
}
|
|
5978
5978
|
if (github) {
|
|
@@ -6458,7 +6458,7 @@ function formatScheduledPrompt(name, prompt) {
|
|
|
6458
6458
|
${prompt}`;
|
|
6459
6459
|
}
|
|
6460
6460
|
async function defaultDeps() {
|
|
6461
|
-
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-
|
|
6461
|
+
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-EVDOHS2S.js");
|
|
6462
6462
|
const orch = getOrchestrator2();
|
|
6463
6463
|
return {
|
|
6464
6464
|
findThread: (id) => findThreadByRef(id),
|
|
@@ -467,7 +467,7 @@ async function continueSourceThread(threadId, prompt) {
|
|
|
467
467
|
await continueOnReply(threadId, prompt);
|
|
468
468
|
return;
|
|
469
469
|
}
|
|
470
|
-
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-
|
|
470
|
+
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-CWBYGHAT.js");
|
|
471
471
|
await getOrchestrator2().send(threadId, prompt);
|
|
472
472
|
} catch {
|
|
473
473
|
}
|
|
@@ -6130,7 +6130,7 @@ function formatIssueToolsDirective(opts) {
|
|
|
6130
6130
|
];
|
|
6131
6131
|
if (opts.linear) {
|
|
6132
6132
|
lines.push(
|
|
6133
|
-
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
6133
|
+
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state, cycle), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
6134
6134
|
);
|
|
6135
6135
|
}
|
|
6136
6136
|
if (github) {
|
|
@@ -6805,7 +6805,7 @@ function formatScheduledPrompt(name, prompt) {
|
|
|
6805
6805
|
${prompt}`;
|
|
6806
6806
|
}
|
|
6807
6807
|
async function defaultDeps() {
|
|
6808
|
-
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-
|
|
6808
|
+
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-CWBYGHAT.js");
|
|
6809
6809
|
const orch = getOrchestrator2();
|
|
6810
6810
|
return {
|
|
6811
6811
|
findThread: (id) => findThreadByRef(id),
|
package/dist/index.cjs
CHANGED
|
@@ -20023,7 +20023,7 @@ function formatIssueToolsDirective(opts) {
|
|
|
20023
20023
|
];
|
|
20024
20024
|
if (opts.linear) {
|
|
20025
20025
|
lines.push(
|
|
20026
|
-
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
20026
|
+
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state, cycle), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
20027
20027
|
);
|
|
20028
20028
|
}
|
|
20029
20029
|
if (github) {
|
|
@@ -23595,6 +23595,7 @@ __export(index_exports, {
|
|
|
23595
23595
|
listLinearIssues: () => listLinearIssues,
|
|
23596
23596
|
listLinearIssuesDirect: () => listLinearIssuesDirect,
|
|
23597
23597
|
listLinearIssuesFiltered: () => listLinearIssuesFiltered,
|
|
23598
|
+
listLinearTeamCycles: () => listLinearTeamCycles,
|
|
23598
23599
|
listLinearTeams: () => listLinearTeams,
|
|
23599
23600
|
listModelsForAgent: () => listModelsForAgent,
|
|
23600
23601
|
listOpencodeModels: () => listOpencodeModels,
|
|
@@ -23731,6 +23732,7 @@ __export(index_exports, {
|
|
|
23731
23732
|
resolveGitHubIssueRepo: () => resolveGitHubIssueRepo,
|
|
23732
23733
|
resolveGithubAgentToken: () => resolveGithubAgentToken,
|
|
23733
23734
|
resolveGithubRepoSlug: () => resolveGithubRepoSlug,
|
|
23735
|
+
resolveLinearCycle: () => resolveLinearCycle,
|
|
23734
23736
|
resolveLinearState: () => resolveLinearState,
|
|
23735
23737
|
resolveLinearTeam: () => resolveLinearTeam,
|
|
23736
23738
|
resolveLoginCommand: () => resolveLoginCommand,
|
|
@@ -24316,7 +24318,7 @@ var LIST_ISSUE_FIELDS = `
|
|
|
24316
24318
|
assignee { id name }
|
|
24317
24319
|
team { id key }
|
|
24318
24320
|
labels(first: 10) { nodes { name } }
|
|
24319
|
-
cycle { name number startsAt endsAt completedAt }
|
|
24321
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
24320
24322
|
`;
|
|
24321
24323
|
var ISSUE_REF_FIELDS = `
|
|
24322
24324
|
id
|
|
@@ -24342,7 +24344,7 @@ var ISSUE_FIELDS = `
|
|
|
24342
24344
|
creator { id name }
|
|
24343
24345
|
team { id key name }
|
|
24344
24346
|
labels(first: 50) { nodes { name } }
|
|
24345
|
-
cycle { name number startsAt endsAt completedAt }
|
|
24347
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
24346
24348
|
project { id name }
|
|
24347
24349
|
parent { ${ISSUE_REF_FIELDS} }
|
|
24348
24350
|
children(first: 25) { nodes { ${ISSUE_REF_FIELDS} } }
|
|
@@ -24427,6 +24429,19 @@ query SideboardTeams {
|
|
|
24427
24429
|
key
|
|
24428
24430
|
name
|
|
24429
24431
|
states(first: 50) { nodes { id name type } }
|
|
24432
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
24433
|
+
}
|
|
24434
|
+
}
|
|
24435
|
+
}
|
|
24436
|
+
`;
|
|
24437
|
+
var TEAM_CYCLES_QUERY = `
|
|
24438
|
+
query SideboardTeamCycles($id: String!) {
|
|
24439
|
+
team(id: $id) {
|
|
24440
|
+
id
|
|
24441
|
+
key
|
|
24442
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
24443
|
+
cycles(first: 40) {
|
|
24444
|
+
nodes { id name number startsAt endsAt completedAt }
|
|
24430
24445
|
}
|
|
24431
24446
|
}
|
|
24432
24447
|
}
|
|
@@ -24519,11 +24534,26 @@ function linearCycleIsActive(cycle, now = Date.now()) {
|
|
|
24519
24534
|
if (Number.isFinite(end) && now > end) return false;
|
|
24520
24535
|
return true;
|
|
24521
24536
|
}
|
|
24537
|
+
function cycleDisplayName(node) {
|
|
24538
|
+
return String(node?.name ?? (node?.number != null ? `Cycle ${node.number}` : "")).trim();
|
|
24539
|
+
}
|
|
24540
|
+
function mapNamedCycle(node) {
|
|
24541
|
+
if (!node?.id) return null;
|
|
24542
|
+
const name = cycleDisplayName(node);
|
|
24543
|
+
if (!name) return null;
|
|
24544
|
+
return {
|
|
24545
|
+
id: String(node.id),
|
|
24546
|
+
name,
|
|
24547
|
+
number: typeof node.number === "number" ? node.number : void 0,
|
|
24548
|
+
isActive: linearCycleIsActive(node)
|
|
24549
|
+
};
|
|
24550
|
+
}
|
|
24522
24551
|
function mapCycle(node) {
|
|
24523
24552
|
if (!node?.name && node?.number == null) return null;
|
|
24524
|
-
const name =
|
|
24553
|
+
const name = cycleDisplayName(node);
|
|
24525
24554
|
if (!name) return null;
|
|
24526
24555
|
return {
|
|
24556
|
+
...node.id ? { id: String(node.id) } : {},
|
|
24527
24557
|
name,
|
|
24528
24558
|
number: typeof node.number === "number" ? node.number : void 0,
|
|
24529
24559
|
isActive: linearCycleIsActive(node)
|
|
@@ -24662,6 +24692,10 @@ function toIssueInfo(issue) {
|
|
|
24662
24692
|
};
|
|
24663
24693
|
}
|
|
24664
24694
|
function mapTeam(node) {
|
|
24695
|
+
const cycles = (node.cycles?.nodes ?? []).flatMap((c) => {
|
|
24696
|
+
const cycle = mapNamedCycle(c);
|
|
24697
|
+
return cycle ? [cycle] : [];
|
|
24698
|
+
});
|
|
24665
24699
|
return {
|
|
24666
24700
|
id: String(node.id ?? ""),
|
|
24667
24701
|
key: String(node.key ?? ""),
|
|
@@ -24669,7 +24703,9 @@ function mapTeam(node) {
|
|
|
24669
24703
|
states: (node.states?.nodes ?? []).flatMap((s) => {
|
|
24670
24704
|
const state = mapState(s);
|
|
24671
24705
|
return state ? [state] : [];
|
|
24672
|
-
})
|
|
24706
|
+
}),
|
|
24707
|
+
activeCycle: mapNamedCycle(node.activeCycle),
|
|
24708
|
+
...cycles.length ? { cycles } : {}
|
|
24673
24709
|
};
|
|
24674
24710
|
}
|
|
24675
24711
|
function resolveLinearTeam(teams, team) {
|
|
@@ -24696,6 +24732,27 @@ function resolveLinearState(team, state) {
|
|
|
24696
24732
|
}
|
|
24697
24733
|
return found;
|
|
24698
24734
|
}
|
|
24735
|
+
function resolveLinearCycle(team, cycle) {
|
|
24736
|
+
if (cycle == null) return null;
|
|
24737
|
+
const s = cycle.trim();
|
|
24738
|
+
if (!s || /^(none|clear|unschedule|null)$/i.test(s)) return null;
|
|
24739
|
+
if (/^(current|active|this)$/i.test(s)) {
|
|
24740
|
+
const active = team.activeCycle ?? team.cycles?.find((c) => c.isActive);
|
|
24741
|
+
if (!active?.id) {
|
|
24742
|
+
throw new Error(`Linear team ${team.key} has no active cycle`);
|
|
24743
|
+
}
|
|
24744
|
+
return active.id;
|
|
24745
|
+
}
|
|
24746
|
+
const lower = s.toLowerCase();
|
|
24747
|
+
const asNumber = Number.parseInt(s, 10);
|
|
24748
|
+
const cycles = team.cycles ?? [];
|
|
24749
|
+
const found = cycles.find((c) => c.id === s) || cycles.find((c) => c.name.toLowerCase() === lower) || (Number.isInteger(asNumber) ? cycles.find((c) => c.number === asNumber) : void 0);
|
|
24750
|
+
if (!found) {
|
|
24751
|
+
const available = cycles.map((c) => c.number != null ? `${c.name} (${c.number})` : c.name).join(", ") || "(none)";
|
|
24752
|
+
throw new Error(`Linear cycle not found on ${team.key}: ${cycle}. Available: ${available}`);
|
|
24753
|
+
}
|
|
24754
|
+
return found.id;
|
|
24755
|
+
}
|
|
24699
24756
|
function normalizePriority(priority) {
|
|
24700
24757
|
if (priority == null) return void 0;
|
|
24701
24758
|
if (!Number.isInteger(priority) || priority < 0 || priority > 4) {
|
|
@@ -24843,6 +24900,19 @@ async function listLinearTeams(opts) {
|
|
|
24843
24900
|
teams: (json.teams?.nodes ?? []).map(mapTeam)
|
|
24844
24901
|
};
|
|
24845
24902
|
}
|
|
24903
|
+
async function listLinearTeamCycles(teamId, opts) {
|
|
24904
|
+
const json = await linearGraphql(TEAM_CYCLES_QUERY, { id: teamId }, opts);
|
|
24905
|
+
if (!json.team?.id) {
|
|
24906
|
+
throw new Error(`Linear team not found: ${teamId}`);
|
|
24907
|
+
}
|
|
24908
|
+
const mapped = mapTeam(json.team);
|
|
24909
|
+
return {
|
|
24910
|
+
id: mapped.id,
|
|
24911
|
+
key: mapped.key,
|
|
24912
|
+
activeCycle: mapped.activeCycle,
|
|
24913
|
+
cycles: mapped.cycles ?? []
|
|
24914
|
+
};
|
|
24915
|
+
}
|
|
24846
24916
|
async function getLinearIssue(id, opts) {
|
|
24847
24917
|
const issueId = id.trim();
|
|
24848
24918
|
if (!issueId) throw new Error("Linear issue id is required (uuid or ENG-123)");
|
|
@@ -24898,16 +24968,28 @@ async function updateLinearIssue(input, opts) {
|
|
|
24898
24968
|
if (input.description !== void 0) {
|
|
24899
24969
|
mutationInput.description = input.description;
|
|
24900
24970
|
}
|
|
24971
|
+
const needsTeam = Boolean(input.state?.trim()) || input.cycle !== void 0;
|
|
24972
|
+
const existing = needsTeam ? await getLinearIssue(issueId, opts) : void 0;
|
|
24901
24973
|
if (input.state?.trim()) {
|
|
24902
|
-
const existing = await getLinearIssue(issueId, opts);
|
|
24903
24974
|
const { teams } = await listLinearTeams(opts);
|
|
24904
|
-
const teamRef = existing
|
|
24975
|
+
const teamRef = existing?.team?.key || existing?.team?.id;
|
|
24905
24976
|
const team = teamRef ? resolveLinearTeam(teams, teamRef) : void 0;
|
|
24906
24977
|
if (!team?.states.length) {
|
|
24907
|
-
throw new Error(`Linear issue ${existing
|
|
24978
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no workflow states to resolve "${input.state}"`);
|
|
24908
24979
|
}
|
|
24909
24980
|
mutationInput.stateId = resolveLinearState(team, input.state).id;
|
|
24910
24981
|
}
|
|
24982
|
+
if (input.cycle !== void 0) {
|
|
24983
|
+
const teamId = existing?.team?.id;
|
|
24984
|
+
if (!teamId) {
|
|
24985
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no team to resolve a cycle`);
|
|
24986
|
+
}
|
|
24987
|
+
const cycles = await listLinearTeamCycles(teamId, opts);
|
|
24988
|
+
mutationInput.cycleId = resolveLinearCycle(
|
|
24989
|
+
{ ...cycles, key: cycles.key || existing?.team?.key || teamId },
|
|
24990
|
+
input.cycle
|
|
24991
|
+
);
|
|
24992
|
+
}
|
|
24911
24993
|
if (input.assignee !== void 0) {
|
|
24912
24994
|
const assignee = input.assignee?.trim() || null;
|
|
24913
24995
|
if (assignee === "me") {
|
|
@@ -24921,7 +25003,7 @@ async function updateLinearIssue(input, opts) {
|
|
|
24921
25003
|
mutationInput.priority = normalizePriority(input.priority);
|
|
24922
25004
|
}
|
|
24923
25005
|
if (Object.keys(mutationInput).length === 0) {
|
|
24924
|
-
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority");
|
|
25006
|
+
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority, cycle");
|
|
24925
25007
|
}
|
|
24926
25008
|
const json = await linearGraphql(ISSUE_UPDATE, { id: issueId, input: mutationInput }, opts);
|
|
24927
25009
|
if (!json.issueUpdate?.success || !json.issueUpdate.issue) {
|
|
@@ -27050,7 +27132,7 @@ var prioritySchema = import_zod6.z.number().int().min(0).max(4).optional().descr
|
|
|
27050
27132
|
function registerLinearTools(server) {
|
|
27051
27133
|
server.tool(
|
|
27052
27134
|
"linear_list_teams",
|
|
27053
|
-
|
|
27135
|
+
'List Linear teams (id, key, name), workflow states, and the active cycle. Use team key on create; state name or type on create/update; cycle name/"current"/"none" on update.',
|
|
27054
27136
|
{},
|
|
27055
27137
|
async () => {
|
|
27056
27138
|
try {
|
|
@@ -27137,14 +27219,15 @@ function registerLinearTools(server) {
|
|
|
27137
27219
|
);
|
|
27138
27220
|
server.tool(
|
|
27139
27221
|
"linear_update_issue",
|
|
27140
|
-
|
|
27222
|
+
'Update a Linear issue (uuid or ENG-123). Pass title, description, state, assignee, priority, and/or cycle. Cycle is name, number, "current"/"active", or "none" to unschedule. When reviewing a PR or ticket, wait until they type a next step before changing the ticket \u2014 do not ask_user after the review. The author is notified.',
|
|
27141
27223
|
{
|
|
27142
27224
|
id: import_zod6.z.string(),
|
|
27143
27225
|
title: import_zod6.z.string().optional(),
|
|
27144
27226
|
description: import_zod6.z.string().optional(),
|
|
27145
27227
|
state: import_zod6.z.string().optional(),
|
|
27146
27228
|
assignee: import_zod6.z.string().nullable().optional(),
|
|
27147
|
-
priority: prioritySchema
|
|
27229
|
+
priority: prioritySchema,
|
|
27230
|
+
cycle: import_zod6.z.string().nullable().optional().describe('Cycle name, number, "current"/"active", or "none" to unschedule.')
|
|
27148
27231
|
},
|
|
27149
27232
|
async (args) => {
|
|
27150
27233
|
try {
|
|
@@ -31723,6 +31806,7 @@ init_outbound_watch();
|
|
|
31723
31806
|
listLinearIssues,
|
|
31724
31807
|
listLinearIssuesDirect,
|
|
31725
31808
|
listLinearIssuesFiltered,
|
|
31809
|
+
listLinearTeamCycles,
|
|
31726
31810
|
listLinearTeams,
|
|
31727
31811
|
listModelsForAgent,
|
|
31728
31812
|
listOpencodeModels,
|
|
@@ -31859,6 +31943,7 @@ init_outbound_watch();
|
|
|
31859
31943
|
resolveGitHubIssueRepo,
|
|
31860
31944
|
resolveGithubAgentToken,
|
|
31861
31945
|
resolveGithubRepoSlug,
|
|
31946
|
+
resolveLinearCycle,
|
|
31862
31947
|
resolveLinearState,
|
|
31863
31948
|
resolveLinearTeam,
|
|
31864
31949
|
resolveLoginCommand,
|
package/dist/index.d.cts
CHANGED
|
@@ -411,6 +411,7 @@ interface PrStack {
|
|
|
411
411
|
blockedReason: string | null;
|
|
412
412
|
}
|
|
413
413
|
interface IssueCycleInfo {
|
|
414
|
+
id?: string;
|
|
414
415
|
name: string;
|
|
415
416
|
number?: number;
|
|
416
417
|
isActive: boolean;
|
|
@@ -2106,11 +2107,19 @@ interface LinearWorkflowState {
|
|
|
2106
2107
|
name: string;
|
|
2107
2108
|
type: string;
|
|
2108
2109
|
}
|
|
2110
|
+
interface LinearCycle {
|
|
2111
|
+
id: string;
|
|
2112
|
+
name: string;
|
|
2113
|
+
number?: number;
|
|
2114
|
+
isActive: boolean;
|
|
2115
|
+
}
|
|
2109
2116
|
interface LinearTeam {
|
|
2110
2117
|
id: string;
|
|
2111
2118
|
key: string;
|
|
2112
2119
|
name: string;
|
|
2113
2120
|
states: LinearWorkflowState[];
|
|
2121
|
+
activeCycle?: LinearCycle | null;
|
|
2122
|
+
cycles?: LinearCycle[];
|
|
2114
2123
|
}
|
|
2115
2124
|
interface LinearIssueRef {
|
|
2116
2125
|
id: string;
|
|
@@ -2170,6 +2179,7 @@ interface LinearIssue {
|
|
|
2170
2179
|
};
|
|
2171
2180
|
labels: string[];
|
|
2172
2181
|
cycle?: {
|
|
2182
|
+
id?: string;
|
|
2173
2183
|
name: string;
|
|
2174
2184
|
number?: number;
|
|
2175
2185
|
isActive: boolean;
|
|
@@ -2209,6 +2219,7 @@ declare function linearCycleIsActive(cycle: {
|
|
|
2209
2219
|
declare function flipLinearRelationType(type: string): string;
|
|
2210
2220
|
declare function resolveLinearTeam(teams: LinearTeam[], team: string): LinearTeam;
|
|
2211
2221
|
declare function resolveLinearState(team: Pick<LinearTeam, 'key' | 'states'>, state: string): LinearWorkflowState;
|
|
2222
|
+
declare function resolveLinearCycle(team: Pick<LinearTeam, 'key' | 'activeCycle' | 'cycles'>, cycle: string | null): string | null;
|
|
2212
2223
|
type LinearAssignedIssuesResult = {
|
|
2213
2224
|
viewer: {
|
|
2214
2225
|
id: string;
|
|
@@ -2264,6 +2275,9 @@ declare function listLinearIssuesDirect(opts?: {
|
|
|
2264
2275
|
declare function listLinearTeams(opts?: {
|
|
2265
2276
|
apiKey?: string | null;
|
|
2266
2277
|
}): Promise<LinearTeamsResult>;
|
|
2278
|
+
declare function listLinearTeamCycles(teamId: string, opts?: {
|
|
2279
|
+
apiKey?: string | null;
|
|
2280
|
+
}): Promise<Pick<LinearTeam, 'id' | 'key' | 'activeCycle' | 'cycles'>>;
|
|
2267
2281
|
declare function getLinearIssue(id: string, opts?: {
|
|
2268
2282
|
apiKey?: string | null;
|
|
2269
2283
|
}): Promise<LinearIssue>;
|
|
@@ -2285,6 +2299,8 @@ declare function updateLinearIssue(input: {
|
|
|
2285
2299
|
state?: string;
|
|
2286
2300
|
assignee?: string | null;
|
|
2287
2301
|
priority?: number;
|
|
2302
|
+
/** Cycle name, number, "current"/"active", or "none" to unschedule. */
|
|
2303
|
+
cycle?: string | null;
|
|
2288
2304
|
}, opts?: {
|
|
2289
2305
|
apiKey?: string | null;
|
|
2290
2306
|
}): Promise<LinearIssue>;
|
|
@@ -6297,4 +6313,4 @@ declare function pollSlackOutboundWatches(opts?: {
|
|
|
6297
6313
|
now?: number;
|
|
6298
6314
|
}): Promise<void>;
|
|
6299
6315
|
|
|
6300
|
-
export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeComment, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type AccountProfile, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLI_DIR, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONTEXT_REVIEW_PATH, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CodeLineRange, type CodeRefInput, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, DETACHED_JOBS_DIR, type DefaultsAppSettings, type DefaultsSettingsPatch, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type EnsuredReviewGuidelines, type ExpandResult, FAMOUS_SOCCER_TEAMS, FOLLOW_UP_BEHAVIORS, type FastForwardMainResult, type FollowUpBehavior, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GITHUB_PR_BODY_MAX_CHARS, GITHUB_PR_BODY_SAFE_CHARS, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubIssue, type GitHubIssueComment, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, IMPLIED_TICKET_RESOLVE_PROMPT, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueActivityComment, type IssueAssigneeFilter, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_DETACHED_JOBS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LIVE_TURN_SPAWN_GRACE_MS, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearAssigneeFilter, type LinearComment, type LinearIssue, type LinearIssueAttachment, type LinearIssueComment, type LinearIssueRef, type LinearIssueRelation, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesOptions, type ListIssuesResult, type ListPrsOptions, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorDefaultsSettings, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, PROFILE_NOTES_MAX, PR_DETAILS_JSON_FIELDS, type PathRefInput, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type ProjectProfileSettings, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedAccountProfile, type ResolvedReviewGuidelines, type ResolvedThreadDefaults, type ResolvedViewerProfile, type ReviewGuidelinesSource, type RunMode, type RunScript, SEED_FULL_TOOL_MESSAGES, SEED_MAX_CHARS, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SessionSeedOptions, type SetupLogSnapshot, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, type ViewerContextWriteResult, type ViewerProfile, WORKTREE_ABLETIME_MCP_TOOLS, WORKTREE_GITHUB_MCP_TOOLS, WORKTREE_LINEAR_MCP_TOOLS, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applySystemCaEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildCodeRefAttachment, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildLinearIssueFilter, buildPastedTextAttachment, buildPathRefAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, clampGithubPrBody, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codeRefRangeLabel, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentAbleTimeTask, commentGitHubIssue, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, countUnpushedVsOrigin, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGitHubIssue, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, emptySetupLog, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewGuidelinesFile, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fastForwardMainCheckoutIfSafe, fetchOriginForWorktree, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findLiveThreadForCreateSource, findOrphanWorktrees, findProjectProfileKey, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, flipLinearRelationType, foldLegacyRolesIntoNotes, followUpBehavior, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAccountProfilePlaybookLine, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatIssueToolsDirective, formatIssueToolsReminder, formatLinearDirective, formatLinearReminder, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatPrGateDirective, formatProcessGuideDirective, formatProjectProfilePlaybookLines, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatViewerContextDirective, formatViewerContextReminder, formatWorkspaceInventory, formatWorkspaceProfileSuffix, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubIssue, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, githubHttpsInsteadOfEntries, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorApiKeyConfigured, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhPrBodyTooLongError, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isInjectedOrchMcpName, isInternalAgentStatusText, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isSetupLastError, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isStaleLastErrorDuringTurn, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueMatchesAssignee, issueSourceLabel, issueTicketFromThread, lastAssistantMessageText, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, linearTicketIdFromThread, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssueCommentsSince, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearCommentsSince, listLinearIssues, listLinearIssuesDirect, listLinearIssuesFiltered, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, markPrReady, materializeSystemCaBundle, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mcpStatusThinkingFromClaudeInit, mentionsPrGoal, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSetupOutput, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeCodeSelection, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originFetchBranch, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGitHubIssueNumber, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parsePrDetailsView, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSetupLog, readSkillBody, readThread, readViewerContext, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAccountProfile, resolveAccountProfileFromSettings, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCreateFirstPrompt, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGitHubIssueRepo, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewOrchestratorOptions, resolveNewThreadOptions, resolveOrchestratorDefaults, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSendFollowUp, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveViewerProfile, resolveViewerProfileForRepo, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, shouldStampSetupLastError, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, splitTurnInputForSystemPrompt, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, ticketSlugForBranch, toAbleTimeIssueInfo, toGitHubIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, trustSystemCertificates, turnCostUsdFromCursorUsage, updateAbleTimeTask, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateGitHubIssue, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateProjectProfileSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, userMcpNamesToDisable, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreeSlugForTicket, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeViewerContext, writeWorktreeFile };
|
|
6316
|
+
export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeComment, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type AccountProfile, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLI_DIR, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONTEXT_REVIEW_PATH, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CodeLineRange, type CodeRefInput, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, DETACHED_JOBS_DIR, type DefaultsAppSettings, type DefaultsSettingsPatch, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type EnsuredReviewGuidelines, type ExpandResult, FAMOUS_SOCCER_TEAMS, FOLLOW_UP_BEHAVIORS, type FastForwardMainResult, type FollowUpBehavior, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GITHUB_PR_BODY_MAX_CHARS, GITHUB_PR_BODY_SAFE_CHARS, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubIssue, type GitHubIssueComment, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, IMPLIED_TICKET_RESOLVE_PROMPT, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueActivityComment, type IssueAssigneeFilter, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_DETACHED_JOBS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LIVE_TURN_SPAWN_GRACE_MS, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearAssigneeFilter, type LinearComment, type LinearCycle, type LinearIssue, type LinearIssueAttachment, type LinearIssueComment, type LinearIssueRef, type LinearIssueRelation, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesOptions, type ListIssuesResult, type ListPrsOptions, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorDefaultsSettings, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, PROFILE_NOTES_MAX, PR_DETAILS_JSON_FIELDS, type PathRefInput, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type ProjectProfileSettings, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedAccountProfile, type ResolvedReviewGuidelines, type ResolvedThreadDefaults, type ResolvedViewerProfile, type ReviewGuidelinesSource, type RunMode, type RunScript, SEED_FULL_TOOL_MESSAGES, SEED_MAX_CHARS, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SessionSeedOptions, type SetupLogSnapshot, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, type ViewerContextWriteResult, type ViewerProfile, WORKTREE_ABLETIME_MCP_TOOLS, WORKTREE_GITHUB_MCP_TOOLS, WORKTREE_LINEAR_MCP_TOOLS, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applySystemCaEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildCodeRefAttachment, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildLinearIssueFilter, buildPastedTextAttachment, buildPathRefAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, clampGithubPrBody, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codeRefRangeLabel, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentAbleTimeTask, commentGitHubIssue, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, countUnpushedVsOrigin, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGitHubIssue, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, emptySetupLog, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewGuidelinesFile, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fastForwardMainCheckoutIfSafe, fetchOriginForWorktree, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findLiveThreadForCreateSource, findOrphanWorktrees, findProjectProfileKey, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, flipLinearRelationType, foldLegacyRolesIntoNotes, followUpBehavior, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAccountProfilePlaybookLine, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatIssueToolsDirective, formatIssueToolsReminder, formatLinearDirective, formatLinearReminder, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatPrGateDirective, formatProcessGuideDirective, formatProjectProfilePlaybookLines, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatViewerContextDirective, formatViewerContextReminder, formatWorkspaceInventory, formatWorkspaceProfileSuffix, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubIssue, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, githubHttpsInsteadOfEntries, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorApiKeyConfigured, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhPrBodyTooLongError, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isInjectedOrchMcpName, isInternalAgentStatusText, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isSetupLastError, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isStaleLastErrorDuringTurn, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueMatchesAssignee, issueSourceLabel, issueTicketFromThread, lastAssistantMessageText, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, linearTicketIdFromThread, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssueCommentsSince, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearCommentsSince, listLinearIssues, listLinearIssuesDirect, listLinearIssuesFiltered, listLinearTeamCycles, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, markPrReady, materializeSystemCaBundle, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mcpStatusThinkingFromClaudeInit, mentionsPrGoal, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSetupOutput, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeCodeSelection, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originFetchBranch, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGitHubIssueNumber, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parsePrDetailsView, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSetupLog, readSkillBody, readThread, readViewerContext, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAccountProfile, resolveAccountProfileFromSettings, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCreateFirstPrompt, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGitHubIssueRepo, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearCycle, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewOrchestratorOptions, resolveNewThreadOptions, resolveOrchestratorDefaults, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSendFollowUp, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveViewerProfile, resolveViewerProfileForRepo, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, shouldStampSetupLastError, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, splitTurnInputForSystemPrompt, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, ticketSlugForBranch, toAbleTimeIssueInfo, toGitHubIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, trustSystemCertificates, turnCostUsdFromCursorUsage, updateAbleTimeTask, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateGitHubIssue, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateProjectProfileSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, userMcpNamesToDisable, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreeSlugForTicket, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeViewerContext, writeWorktreeFile };
|
package/dist/index.d.ts
CHANGED
|
@@ -411,6 +411,7 @@ interface PrStack {
|
|
|
411
411
|
blockedReason: string | null;
|
|
412
412
|
}
|
|
413
413
|
interface IssueCycleInfo {
|
|
414
|
+
id?: string;
|
|
414
415
|
name: string;
|
|
415
416
|
number?: number;
|
|
416
417
|
isActive: boolean;
|
|
@@ -2106,11 +2107,19 @@ interface LinearWorkflowState {
|
|
|
2106
2107
|
name: string;
|
|
2107
2108
|
type: string;
|
|
2108
2109
|
}
|
|
2110
|
+
interface LinearCycle {
|
|
2111
|
+
id: string;
|
|
2112
|
+
name: string;
|
|
2113
|
+
number?: number;
|
|
2114
|
+
isActive: boolean;
|
|
2115
|
+
}
|
|
2109
2116
|
interface LinearTeam {
|
|
2110
2117
|
id: string;
|
|
2111
2118
|
key: string;
|
|
2112
2119
|
name: string;
|
|
2113
2120
|
states: LinearWorkflowState[];
|
|
2121
|
+
activeCycle?: LinearCycle | null;
|
|
2122
|
+
cycles?: LinearCycle[];
|
|
2114
2123
|
}
|
|
2115
2124
|
interface LinearIssueRef {
|
|
2116
2125
|
id: string;
|
|
@@ -2170,6 +2179,7 @@ interface LinearIssue {
|
|
|
2170
2179
|
};
|
|
2171
2180
|
labels: string[];
|
|
2172
2181
|
cycle?: {
|
|
2182
|
+
id?: string;
|
|
2173
2183
|
name: string;
|
|
2174
2184
|
number?: number;
|
|
2175
2185
|
isActive: boolean;
|
|
@@ -2209,6 +2219,7 @@ declare function linearCycleIsActive(cycle: {
|
|
|
2209
2219
|
declare function flipLinearRelationType(type: string): string;
|
|
2210
2220
|
declare function resolveLinearTeam(teams: LinearTeam[], team: string): LinearTeam;
|
|
2211
2221
|
declare function resolveLinearState(team: Pick<LinearTeam, 'key' | 'states'>, state: string): LinearWorkflowState;
|
|
2222
|
+
declare function resolveLinearCycle(team: Pick<LinearTeam, 'key' | 'activeCycle' | 'cycles'>, cycle: string | null): string | null;
|
|
2212
2223
|
type LinearAssignedIssuesResult = {
|
|
2213
2224
|
viewer: {
|
|
2214
2225
|
id: string;
|
|
@@ -2264,6 +2275,9 @@ declare function listLinearIssuesDirect(opts?: {
|
|
|
2264
2275
|
declare function listLinearTeams(opts?: {
|
|
2265
2276
|
apiKey?: string | null;
|
|
2266
2277
|
}): Promise<LinearTeamsResult>;
|
|
2278
|
+
declare function listLinearTeamCycles(teamId: string, opts?: {
|
|
2279
|
+
apiKey?: string | null;
|
|
2280
|
+
}): Promise<Pick<LinearTeam, 'id' | 'key' | 'activeCycle' | 'cycles'>>;
|
|
2267
2281
|
declare function getLinearIssue(id: string, opts?: {
|
|
2268
2282
|
apiKey?: string | null;
|
|
2269
2283
|
}): Promise<LinearIssue>;
|
|
@@ -2285,6 +2299,8 @@ declare function updateLinearIssue(input: {
|
|
|
2285
2299
|
state?: string;
|
|
2286
2300
|
assignee?: string | null;
|
|
2287
2301
|
priority?: number;
|
|
2302
|
+
/** Cycle name, number, "current"/"active", or "none" to unschedule. */
|
|
2303
|
+
cycle?: string | null;
|
|
2288
2304
|
}, opts?: {
|
|
2289
2305
|
apiKey?: string | null;
|
|
2290
2306
|
}): Promise<LinearIssue>;
|
|
@@ -6297,4 +6313,4 @@ declare function pollSlackOutboundWatches(opts?: {
|
|
|
6297
6313
|
now?: number;
|
|
6298
6314
|
}): Promise<void>;
|
|
6299
6315
|
|
|
6300
|
-
export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeComment, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type AccountProfile, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLI_DIR, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONTEXT_REVIEW_PATH, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CodeLineRange, type CodeRefInput, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, DETACHED_JOBS_DIR, type DefaultsAppSettings, type DefaultsSettingsPatch, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type EnsuredReviewGuidelines, type ExpandResult, FAMOUS_SOCCER_TEAMS, FOLLOW_UP_BEHAVIORS, type FastForwardMainResult, type FollowUpBehavior, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GITHUB_PR_BODY_MAX_CHARS, GITHUB_PR_BODY_SAFE_CHARS, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubIssue, type GitHubIssueComment, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, IMPLIED_TICKET_RESOLVE_PROMPT, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueActivityComment, type IssueAssigneeFilter, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_DETACHED_JOBS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LIVE_TURN_SPAWN_GRACE_MS, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearAssigneeFilter, type LinearComment, type LinearIssue, type LinearIssueAttachment, type LinearIssueComment, type LinearIssueRef, type LinearIssueRelation, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesOptions, type ListIssuesResult, type ListPrsOptions, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorDefaultsSettings, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, PROFILE_NOTES_MAX, PR_DETAILS_JSON_FIELDS, type PathRefInput, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type ProjectProfileSettings, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedAccountProfile, type ResolvedReviewGuidelines, type ResolvedThreadDefaults, type ResolvedViewerProfile, type ReviewGuidelinesSource, type RunMode, type RunScript, SEED_FULL_TOOL_MESSAGES, SEED_MAX_CHARS, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SessionSeedOptions, type SetupLogSnapshot, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, type ViewerContextWriteResult, type ViewerProfile, WORKTREE_ABLETIME_MCP_TOOLS, WORKTREE_GITHUB_MCP_TOOLS, WORKTREE_LINEAR_MCP_TOOLS, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applySystemCaEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildCodeRefAttachment, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildLinearIssueFilter, buildPastedTextAttachment, buildPathRefAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, clampGithubPrBody, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codeRefRangeLabel, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentAbleTimeTask, commentGitHubIssue, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, countUnpushedVsOrigin, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGitHubIssue, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, emptySetupLog, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewGuidelinesFile, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fastForwardMainCheckoutIfSafe, fetchOriginForWorktree, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findLiveThreadForCreateSource, findOrphanWorktrees, findProjectProfileKey, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, flipLinearRelationType, foldLegacyRolesIntoNotes, followUpBehavior, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAccountProfilePlaybookLine, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatIssueToolsDirective, formatIssueToolsReminder, formatLinearDirective, formatLinearReminder, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatPrGateDirective, formatProcessGuideDirective, formatProjectProfilePlaybookLines, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatViewerContextDirective, formatViewerContextReminder, formatWorkspaceInventory, formatWorkspaceProfileSuffix, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubIssue, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, githubHttpsInsteadOfEntries, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorApiKeyConfigured, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhPrBodyTooLongError, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isInjectedOrchMcpName, isInternalAgentStatusText, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isSetupLastError, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isStaleLastErrorDuringTurn, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueMatchesAssignee, issueSourceLabel, issueTicketFromThread, lastAssistantMessageText, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, linearTicketIdFromThread, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssueCommentsSince, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearCommentsSince, listLinearIssues, listLinearIssuesDirect, listLinearIssuesFiltered, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, markPrReady, materializeSystemCaBundle, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mcpStatusThinkingFromClaudeInit, mentionsPrGoal, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSetupOutput, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeCodeSelection, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originFetchBranch, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGitHubIssueNumber, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parsePrDetailsView, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSetupLog, readSkillBody, readThread, readViewerContext, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAccountProfile, resolveAccountProfileFromSettings, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCreateFirstPrompt, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGitHubIssueRepo, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewOrchestratorOptions, resolveNewThreadOptions, resolveOrchestratorDefaults, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSendFollowUp, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveViewerProfile, resolveViewerProfileForRepo, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, shouldStampSetupLastError, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, splitTurnInputForSystemPrompt, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, ticketSlugForBranch, toAbleTimeIssueInfo, toGitHubIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, trustSystemCertificates, turnCostUsdFromCursorUsage, updateAbleTimeTask, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateGitHubIssue, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateProjectProfileSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, userMcpNamesToDisable, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreeSlugForTicket, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeViewerContext, writeWorktreeFile };
|
|
6316
|
+
export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeComment, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type AccountProfile, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLI_DIR, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONTEXT_REVIEW_PATH, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CodeLineRange, type CodeRefInput, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, DETACHED_JOBS_DIR, type DefaultsAppSettings, type DefaultsSettingsPatch, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type EnsuredReviewGuidelines, type ExpandResult, FAMOUS_SOCCER_TEAMS, FOLLOW_UP_BEHAVIORS, type FastForwardMainResult, type FollowUpBehavior, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GITHUB_PR_BODY_MAX_CHARS, GITHUB_PR_BODY_SAFE_CHARS, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubIssue, type GitHubIssueComment, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, IMPLIED_TICKET_RESOLVE_PROMPT, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueActivityComment, type IssueAssigneeFilter, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_DETACHED_JOBS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LIVE_TURN_SPAWN_GRACE_MS, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearAssigneeFilter, type LinearComment, type LinearCycle, type LinearIssue, type LinearIssueAttachment, type LinearIssueComment, type LinearIssueRef, type LinearIssueRelation, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesOptions, type ListIssuesResult, type ListPrsOptions, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorDefaultsSettings, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, PROFILE_NOTES_MAX, PR_DETAILS_JSON_FIELDS, type PathRefInput, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type ProjectProfileSettings, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedAccountProfile, type ResolvedReviewGuidelines, type ResolvedThreadDefaults, type ResolvedViewerProfile, type ReviewGuidelinesSource, type RunMode, type RunScript, SEED_FULL_TOOL_MESSAGES, SEED_MAX_CHARS, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SessionSeedOptions, type SetupLogSnapshot, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, type ViewerContextWriteResult, type ViewerProfile, WORKTREE_ABLETIME_MCP_TOOLS, WORKTREE_GITHUB_MCP_TOOLS, WORKTREE_LINEAR_MCP_TOOLS, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applySystemCaEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildCodeRefAttachment, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildLinearIssueFilter, buildPastedTextAttachment, buildPathRefAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, clampGithubPrBody, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codeRefRangeLabel, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentAbleTimeTask, commentGitHubIssue, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, countUnpushedVsOrigin, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGitHubIssue, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, emptySetupLog, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewGuidelinesFile, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fastForwardMainCheckoutIfSafe, fetchOriginForWorktree, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findLiveThreadForCreateSource, findOrphanWorktrees, findProjectProfileKey, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, flipLinearRelationType, foldLegacyRolesIntoNotes, followUpBehavior, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAccountProfilePlaybookLine, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatIssueToolsDirective, formatIssueToolsReminder, formatLinearDirective, formatLinearReminder, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatPrGateDirective, formatProcessGuideDirective, formatProjectProfilePlaybookLines, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatViewerContextDirective, formatViewerContextReminder, formatWorkspaceInventory, formatWorkspaceProfileSuffix, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubIssue, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, githubHttpsInsteadOfEntries, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorApiKeyConfigured, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhPrBodyTooLongError, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isInjectedOrchMcpName, isInternalAgentStatusText, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isSetupLastError, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isStaleLastErrorDuringTurn, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueMatchesAssignee, issueSourceLabel, issueTicketFromThread, lastAssistantMessageText, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, linearTicketIdFromThread, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssueCommentsSince, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearCommentsSince, listLinearIssues, listLinearIssuesDirect, listLinearIssuesFiltered, listLinearTeamCycles, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, markPrReady, materializeSystemCaBundle, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mcpStatusThinkingFromClaudeInit, mentionsPrGoal, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSetupOutput, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeCodeSelection, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originFetchBranch, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGitHubIssueNumber, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parsePrDetailsView, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSetupLog, readSkillBody, readThread, readViewerContext, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAccountProfile, resolveAccountProfileFromSettings, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCreateFirstPrompt, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGitHubIssueRepo, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearCycle, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewOrchestratorOptions, resolveNewThreadOptions, resolveOrchestratorDefaults, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSendFollowUp, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveViewerProfile, resolveViewerProfileForRepo, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, shouldStampSetupLastError, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, splitTurnInputForSystemPrompt, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, ticketSlugForBranch, toAbleTimeIssueInfo, toGitHubIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, trustSystemCertificates, turnCostUsdFromCursorUsage, updateAbleTimeTask, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateGitHubIssue, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateProjectProfileSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, userMcpNamesToDisable, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreeSlugForTicket, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeViewerContext, writeWorktreeFile };
|
package/dist/index.js
CHANGED
|
@@ -238,7 +238,7 @@ import {
|
|
|
238
238
|
worktreeCleanupSettings,
|
|
239
239
|
wrapReviewSkillMarkdown,
|
|
240
240
|
writeWorktreeFile
|
|
241
|
-
} from "./chunk-
|
|
241
|
+
} from "./chunk-U6FCBOS7.js";
|
|
242
242
|
import {
|
|
243
243
|
LEGACY_PLAN_FILE_REL,
|
|
244
244
|
PLAN_FILE_NAME,
|
|
@@ -1127,7 +1127,7 @@ var LIST_ISSUE_FIELDS = `
|
|
|
1127
1127
|
assignee { id name }
|
|
1128
1128
|
team { id key }
|
|
1129
1129
|
labels(first: 10) { nodes { name } }
|
|
1130
|
-
cycle { name number startsAt endsAt completedAt }
|
|
1130
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
1131
1131
|
`;
|
|
1132
1132
|
var ISSUE_REF_FIELDS = `
|
|
1133
1133
|
id
|
|
@@ -1153,7 +1153,7 @@ var ISSUE_FIELDS = `
|
|
|
1153
1153
|
creator { id name }
|
|
1154
1154
|
team { id key name }
|
|
1155
1155
|
labels(first: 50) { nodes { name } }
|
|
1156
|
-
cycle { name number startsAt endsAt completedAt }
|
|
1156
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
1157
1157
|
project { id name }
|
|
1158
1158
|
parent { ${ISSUE_REF_FIELDS} }
|
|
1159
1159
|
children(first: 25) { nodes { ${ISSUE_REF_FIELDS} } }
|
|
@@ -1238,6 +1238,19 @@ query SideboardTeams {
|
|
|
1238
1238
|
key
|
|
1239
1239
|
name
|
|
1240
1240
|
states(first: 50) { nodes { id name type } }
|
|
1241
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
`;
|
|
1246
|
+
var TEAM_CYCLES_QUERY = `
|
|
1247
|
+
query SideboardTeamCycles($id: String!) {
|
|
1248
|
+
team(id: $id) {
|
|
1249
|
+
id
|
|
1250
|
+
key
|
|
1251
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
1252
|
+
cycles(first: 40) {
|
|
1253
|
+
nodes { id name number startsAt endsAt completedAt }
|
|
1241
1254
|
}
|
|
1242
1255
|
}
|
|
1243
1256
|
}
|
|
@@ -1330,11 +1343,26 @@ function linearCycleIsActive(cycle, now = Date.now()) {
|
|
|
1330
1343
|
if (Number.isFinite(end) && now > end) return false;
|
|
1331
1344
|
return true;
|
|
1332
1345
|
}
|
|
1346
|
+
function cycleDisplayName(node) {
|
|
1347
|
+
return String(node?.name ?? (node?.number != null ? `Cycle ${node.number}` : "")).trim();
|
|
1348
|
+
}
|
|
1349
|
+
function mapNamedCycle(node) {
|
|
1350
|
+
if (!node?.id) return null;
|
|
1351
|
+
const name = cycleDisplayName(node);
|
|
1352
|
+
if (!name) return null;
|
|
1353
|
+
return {
|
|
1354
|
+
id: String(node.id),
|
|
1355
|
+
name,
|
|
1356
|
+
number: typeof node.number === "number" ? node.number : void 0,
|
|
1357
|
+
isActive: linearCycleIsActive(node)
|
|
1358
|
+
};
|
|
1359
|
+
}
|
|
1333
1360
|
function mapCycle(node) {
|
|
1334
1361
|
if (!node?.name && node?.number == null) return null;
|
|
1335
|
-
const name =
|
|
1362
|
+
const name = cycleDisplayName(node);
|
|
1336
1363
|
if (!name) return null;
|
|
1337
1364
|
return {
|
|
1365
|
+
...node.id ? { id: String(node.id) } : {},
|
|
1338
1366
|
name,
|
|
1339
1367
|
number: typeof node.number === "number" ? node.number : void 0,
|
|
1340
1368
|
isActive: linearCycleIsActive(node)
|
|
@@ -1473,6 +1501,10 @@ function toIssueInfo(issue) {
|
|
|
1473
1501
|
};
|
|
1474
1502
|
}
|
|
1475
1503
|
function mapTeam(node) {
|
|
1504
|
+
const cycles = (node.cycles?.nodes ?? []).flatMap((c) => {
|
|
1505
|
+
const cycle = mapNamedCycle(c);
|
|
1506
|
+
return cycle ? [cycle] : [];
|
|
1507
|
+
});
|
|
1476
1508
|
return {
|
|
1477
1509
|
id: String(node.id ?? ""),
|
|
1478
1510
|
key: String(node.key ?? ""),
|
|
@@ -1480,7 +1512,9 @@ function mapTeam(node) {
|
|
|
1480
1512
|
states: (node.states?.nodes ?? []).flatMap((s) => {
|
|
1481
1513
|
const state = mapState(s);
|
|
1482
1514
|
return state ? [state] : [];
|
|
1483
|
-
})
|
|
1515
|
+
}),
|
|
1516
|
+
activeCycle: mapNamedCycle(node.activeCycle),
|
|
1517
|
+
...cycles.length ? { cycles } : {}
|
|
1484
1518
|
};
|
|
1485
1519
|
}
|
|
1486
1520
|
function resolveLinearTeam(teams, team) {
|
|
@@ -1507,6 +1541,27 @@ function resolveLinearState(team, state) {
|
|
|
1507
1541
|
}
|
|
1508
1542
|
return found;
|
|
1509
1543
|
}
|
|
1544
|
+
function resolveLinearCycle(team, cycle) {
|
|
1545
|
+
if (cycle == null) return null;
|
|
1546
|
+
const s = cycle.trim();
|
|
1547
|
+
if (!s || /^(none|clear|unschedule|null)$/i.test(s)) return null;
|
|
1548
|
+
if (/^(current|active|this)$/i.test(s)) {
|
|
1549
|
+
const active = team.activeCycle ?? team.cycles?.find((c) => c.isActive);
|
|
1550
|
+
if (!active?.id) {
|
|
1551
|
+
throw new Error(`Linear team ${team.key} has no active cycle`);
|
|
1552
|
+
}
|
|
1553
|
+
return active.id;
|
|
1554
|
+
}
|
|
1555
|
+
const lower = s.toLowerCase();
|
|
1556
|
+
const asNumber = Number.parseInt(s, 10);
|
|
1557
|
+
const cycles = team.cycles ?? [];
|
|
1558
|
+
const found = cycles.find((c) => c.id === s) || cycles.find((c) => c.name.toLowerCase() === lower) || (Number.isInteger(asNumber) ? cycles.find((c) => c.number === asNumber) : void 0);
|
|
1559
|
+
if (!found) {
|
|
1560
|
+
const available = cycles.map((c) => c.number != null ? `${c.name} (${c.number})` : c.name).join(", ") || "(none)";
|
|
1561
|
+
throw new Error(`Linear cycle not found on ${team.key}: ${cycle}. Available: ${available}`);
|
|
1562
|
+
}
|
|
1563
|
+
return found.id;
|
|
1564
|
+
}
|
|
1510
1565
|
function normalizePriority(priority) {
|
|
1511
1566
|
if (priority == null) return void 0;
|
|
1512
1567
|
if (!Number.isInteger(priority) || priority < 0 || priority > 4) {
|
|
@@ -1654,6 +1709,19 @@ async function listLinearTeams(opts) {
|
|
|
1654
1709
|
teams: (json.teams?.nodes ?? []).map(mapTeam)
|
|
1655
1710
|
};
|
|
1656
1711
|
}
|
|
1712
|
+
async function listLinearTeamCycles(teamId, opts) {
|
|
1713
|
+
const json = await linearGraphql(TEAM_CYCLES_QUERY, { id: teamId }, opts);
|
|
1714
|
+
if (!json.team?.id) {
|
|
1715
|
+
throw new Error(`Linear team not found: ${teamId}`);
|
|
1716
|
+
}
|
|
1717
|
+
const mapped = mapTeam(json.team);
|
|
1718
|
+
return {
|
|
1719
|
+
id: mapped.id,
|
|
1720
|
+
key: mapped.key,
|
|
1721
|
+
activeCycle: mapped.activeCycle,
|
|
1722
|
+
cycles: mapped.cycles ?? []
|
|
1723
|
+
};
|
|
1724
|
+
}
|
|
1657
1725
|
async function getLinearIssue(id, opts) {
|
|
1658
1726
|
const issueId = id.trim();
|
|
1659
1727
|
if (!issueId) throw new Error("Linear issue id is required (uuid or ENG-123)");
|
|
@@ -1709,16 +1777,28 @@ async function updateLinearIssue(input, opts) {
|
|
|
1709
1777
|
if (input.description !== void 0) {
|
|
1710
1778
|
mutationInput.description = input.description;
|
|
1711
1779
|
}
|
|
1780
|
+
const needsTeam = Boolean(input.state?.trim()) || input.cycle !== void 0;
|
|
1781
|
+
const existing = needsTeam ? await getLinearIssue(issueId, opts) : void 0;
|
|
1712
1782
|
if (input.state?.trim()) {
|
|
1713
|
-
const existing = await getLinearIssue(issueId, opts);
|
|
1714
1783
|
const { teams } = await listLinearTeams(opts);
|
|
1715
|
-
const teamRef = existing
|
|
1784
|
+
const teamRef = existing?.team?.key || existing?.team?.id;
|
|
1716
1785
|
const team = teamRef ? resolveLinearTeam(teams, teamRef) : void 0;
|
|
1717
1786
|
if (!team?.states.length) {
|
|
1718
|
-
throw new Error(`Linear issue ${existing
|
|
1787
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no workflow states to resolve "${input.state}"`);
|
|
1719
1788
|
}
|
|
1720
1789
|
mutationInput.stateId = resolveLinearState(team, input.state).id;
|
|
1721
1790
|
}
|
|
1791
|
+
if (input.cycle !== void 0) {
|
|
1792
|
+
const teamId = existing?.team?.id;
|
|
1793
|
+
if (!teamId) {
|
|
1794
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no team to resolve a cycle`);
|
|
1795
|
+
}
|
|
1796
|
+
const cycles = await listLinearTeamCycles(teamId, opts);
|
|
1797
|
+
mutationInput.cycleId = resolveLinearCycle(
|
|
1798
|
+
{ ...cycles, key: cycles.key || existing?.team?.key || teamId },
|
|
1799
|
+
input.cycle
|
|
1800
|
+
);
|
|
1801
|
+
}
|
|
1722
1802
|
if (input.assignee !== void 0) {
|
|
1723
1803
|
const assignee = input.assignee?.trim() || null;
|
|
1724
1804
|
if (assignee === "me") {
|
|
@@ -1732,7 +1812,7 @@ async function updateLinearIssue(input, opts) {
|
|
|
1732
1812
|
mutationInput.priority = normalizePriority(input.priority);
|
|
1733
1813
|
}
|
|
1734
1814
|
if (Object.keys(mutationInput).length === 0) {
|
|
1735
|
-
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority");
|
|
1815
|
+
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority, cycle");
|
|
1736
1816
|
}
|
|
1737
1817
|
const json = await linearGraphql(ISSUE_UPDATE, { id: issueId, input: mutationInput }, opts);
|
|
1738
1818
|
if (!json.issueUpdate?.success || !json.issueUpdate.issue) {
|
|
@@ -3772,7 +3852,7 @@ var prioritySchema = z6.number().int().min(0).max(4).optional().describe("0 none
|
|
|
3772
3852
|
function registerLinearTools(server) {
|
|
3773
3853
|
server.tool(
|
|
3774
3854
|
"linear_list_teams",
|
|
3775
|
-
|
|
3855
|
+
'List Linear teams (id, key, name), workflow states, and the active cycle. Use team key on create; state name or type on create/update; cycle name/"current"/"none" on update.',
|
|
3776
3856
|
{},
|
|
3777
3857
|
async () => {
|
|
3778
3858
|
try {
|
|
@@ -3859,14 +3939,15 @@ function registerLinearTools(server) {
|
|
|
3859
3939
|
);
|
|
3860
3940
|
server.tool(
|
|
3861
3941
|
"linear_update_issue",
|
|
3862
|
-
|
|
3942
|
+
'Update a Linear issue (uuid or ENG-123). Pass title, description, state, assignee, priority, and/or cycle. Cycle is name, number, "current"/"active", or "none" to unschedule. When reviewing a PR or ticket, wait until they type a next step before changing the ticket \u2014 do not ask_user after the review. The author is notified.',
|
|
3863
3943
|
{
|
|
3864
3944
|
id: z6.string(),
|
|
3865
3945
|
title: z6.string().optional(),
|
|
3866
3946
|
description: z6.string().optional(),
|
|
3867
3947
|
state: z6.string().optional(),
|
|
3868
3948
|
assignee: z6.string().nullable().optional(),
|
|
3869
|
-
priority: prioritySchema
|
|
3949
|
+
priority: prioritySchema,
|
|
3950
|
+
cycle: z6.string().nullable().optional().describe('Cycle name, number, "current"/"active", or "none" to unschedule.')
|
|
3870
3951
|
},
|
|
3871
3952
|
async (args) => {
|
|
3872
3953
|
try {
|
|
@@ -8376,6 +8457,7 @@ export {
|
|
|
8376
8457
|
listLinearIssues,
|
|
8377
8458
|
listLinearIssuesDirect,
|
|
8378
8459
|
listLinearIssuesFiltered,
|
|
8460
|
+
listLinearTeamCycles,
|
|
8379
8461
|
listLinearTeams,
|
|
8380
8462
|
listModelsForAgent,
|
|
8381
8463
|
listOpencodeModels,
|
|
@@ -8512,6 +8594,7 @@ export {
|
|
|
8512
8594
|
resolveGitHubIssueRepo,
|
|
8513
8595
|
resolveGithubAgentToken,
|
|
8514
8596
|
resolveGithubRepoSlug,
|
|
8597
|
+
resolveLinearCycle,
|
|
8515
8598
|
resolveLinearState,
|
|
8516
8599
|
resolveLinearTeam,
|
|
8517
8600
|
resolveLoginCommand,
|
package/dist/mcp/run-stdio.cjs
CHANGED
|
@@ -18299,7 +18299,7 @@ function formatIssueToolsDirective(opts) {
|
|
|
18299
18299
|
];
|
|
18300
18300
|
if (opts.linear) {
|
|
18301
18301
|
lines.push(
|
|
18302
|
-
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
18302
|
+
"- Linear: `linear_search_issues` (assignee=me; pass `updatedSince` for \u201Cany updates since yesterday?\u201D \u2014 new tickets, edits, and comments), `linear_get_issue` (comments; pass `include=full` if crush.truncated), `linear_comment`, `linear_update_issue` (state, cycle), `linear_create_issue` (pass `parent` for spin-offs; call `linear_list_teams` first). Scope errors: reconnect Linear in Settings \u2192 Issues."
|
|
18303
18303
|
);
|
|
18304
18304
|
}
|
|
18305
18305
|
if (github) {
|
|
@@ -22065,7 +22065,7 @@ var LIST_ISSUE_FIELDS = `
|
|
|
22065
22065
|
assignee { id name }
|
|
22066
22066
|
team { id key }
|
|
22067
22067
|
labels(first: 10) { nodes { name } }
|
|
22068
|
-
cycle { name number startsAt endsAt completedAt }
|
|
22068
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
22069
22069
|
`;
|
|
22070
22070
|
var ISSUE_REF_FIELDS = `
|
|
22071
22071
|
id
|
|
@@ -22091,7 +22091,7 @@ var ISSUE_FIELDS = `
|
|
|
22091
22091
|
creator { id name }
|
|
22092
22092
|
team { id key name }
|
|
22093
22093
|
labels(first: 50) { nodes { name } }
|
|
22094
|
-
cycle { name number startsAt endsAt completedAt }
|
|
22094
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
22095
22095
|
project { id name }
|
|
22096
22096
|
parent { ${ISSUE_REF_FIELDS} }
|
|
22097
22097
|
children(first: 25) { nodes { ${ISSUE_REF_FIELDS} } }
|
|
@@ -22176,6 +22176,19 @@ query SideboardTeams {
|
|
|
22176
22176
|
key
|
|
22177
22177
|
name
|
|
22178
22178
|
states(first: 50) { nodes { id name type } }
|
|
22179
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
22180
|
+
}
|
|
22181
|
+
}
|
|
22182
|
+
}
|
|
22183
|
+
`;
|
|
22184
|
+
var TEAM_CYCLES_QUERY = `
|
|
22185
|
+
query SideboardTeamCycles($id: String!) {
|
|
22186
|
+
team(id: $id) {
|
|
22187
|
+
id
|
|
22188
|
+
key
|
|
22189
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
22190
|
+
cycles(first: 40) {
|
|
22191
|
+
nodes { id name number startsAt endsAt completedAt }
|
|
22179
22192
|
}
|
|
22180
22193
|
}
|
|
22181
22194
|
}
|
|
@@ -22268,11 +22281,26 @@ function linearCycleIsActive(cycle, now = Date.now()) {
|
|
|
22268
22281
|
if (Number.isFinite(end) && now > end) return false;
|
|
22269
22282
|
return true;
|
|
22270
22283
|
}
|
|
22284
|
+
function cycleDisplayName(node) {
|
|
22285
|
+
return String(node?.name ?? (node?.number != null ? `Cycle ${node.number}` : "")).trim();
|
|
22286
|
+
}
|
|
22287
|
+
function mapNamedCycle(node) {
|
|
22288
|
+
if (!node?.id) return null;
|
|
22289
|
+
const name = cycleDisplayName(node);
|
|
22290
|
+
if (!name) return null;
|
|
22291
|
+
return {
|
|
22292
|
+
id: String(node.id),
|
|
22293
|
+
name,
|
|
22294
|
+
number: typeof node.number === "number" ? node.number : void 0,
|
|
22295
|
+
isActive: linearCycleIsActive(node)
|
|
22296
|
+
};
|
|
22297
|
+
}
|
|
22271
22298
|
function mapCycle(node) {
|
|
22272
22299
|
if (!node?.name && node?.number == null) return null;
|
|
22273
|
-
const name =
|
|
22300
|
+
const name = cycleDisplayName(node);
|
|
22274
22301
|
if (!name) return null;
|
|
22275
22302
|
return {
|
|
22303
|
+
...node.id ? { id: String(node.id) } : {},
|
|
22276
22304
|
name,
|
|
22277
22305
|
number: typeof node.number === "number" ? node.number : void 0,
|
|
22278
22306
|
isActive: linearCycleIsActive(node)
|
|
@@ -22411,6 +22439,10 @@ function toIssueInfo(issue) {
|
|
|
22411
22439
|
};
|
|
22412
22440
|
}
|
|
22413
22441
|
function mapTeam(node) {
|
|
22442
|
+
const cycles = (node.cycles?.nodes ?? []).flatMap((c) => {
|
|
22443
|
+
const cycle = mapNamedCycle(c);
|
|
22444
|
+
return cycle ? [cycle] : [];
|
|
22445
|
+
});
|
|
22414
22446
|
return {
|
|
22415
22447
|
id: String(node.id ?? ""),
|
|
22416
22448
|
key: String(node.key ?? ""),
|
|
@@ -22418,7 +22450,9 @@ function mapTeam(node) {
|
|
|
22418
22450
|
states: (node.states?.nodes ?? []).flatMap((s) => {
|
|
22419
22451
|
const state = mapState(s);
|
|
22420
22452
|
return state ? [state] : [];
|
|
22421
|
-
})
|
|
22453
|
+
}),
|
|
22454
|
+
activeCycle: mapNamedCycle(node.activeCycle),
|
|
22455
|
+
...cycles.length ? { cycles } : {}
|
|
22422
22456
|
};
|
|
22423
22457
|
}
|
|
22424
22458
|
function resolveLinearTeam(teams, team) {
|
|
@@ -22445,6 +22479,27 @@ function resolveLinearState(team, state) {
|
|
|
22445
22479
|
}
|
|
22446
22480
|
return found;
|
|
22447
22481
|
}
|
|
22482
|
+
function resolveLinearCycle(team, cycle) {
|
|
22483
|
+
if (cycle == null) return null;
|
|
22484
|
+
const s = cycle.trim();
|
|
22485
|
+
if (!s || /^(none|clear|unschedule|null)$/i.test(s)) return null;
|
|
22486
|
+
if (/^(current|active|this)$/i.test(s)) {
|
|
22487
|
+
const active = team.activeCycle ?? team.cycles?.find((c) => c.isActive);
|
|
22488
|
+
if (!active?.id) {
|
|
22489
|
+
throw new Error(`Linear team ${team.key} has no active cycle`);
|
|
22490
|
+
}
|
|
22491
|
+
return active.id;
|
|
22492
|
+
}
|
|
22493
|
+
const lower = s.toLowerCase();
|
|
22494
|
+
const asNumber = Number.parseInt(s, 10);
|
|
22495
|
+
const cycles = team.cycles ?? [];
|
|
22496
|
+
const found = cycles.find((c) => c.id === s) || cycles.find((c) => c.name.toLowerCase() === lower) || (Number.isInteger(asNumber) ? cycles.find((c) => c.number === asNumber) : void 0);
|
|
22497
|
+
if (!found) {
|
|
22498
|
+
const available = cycles.map((c) => c.number != null ? `${c.name} (${c.number})` : c.name).join(", ") || "(none)";
|
|
22499
|
+
throw new Error(`Linear cycle not found on ${team.key}: ${cycle}. Available: ${available}`);
|
|
22500
|
+
}
|
|
22501
|
+
return found.id;
|
|
22502
|
+
}
|
|
22448
22503
|
function normalizePriority(priority) {
|
|
22449
22504
|
if (priority == null) return void 0;
|
|
22450
22505
|
if (!Number.isInteger(priority) || priority < 0 || priority > 4) {
|
|
@@ -22586,6 +22641,19 @@ async function listLinearTeams(opts) {
|
|
|
22586
22641
|
teams: (json.teams?.nodes ?? []).map(mapTeam)
|
|
22587
22642
|
};
|
|
22588
22643
|
}
|
|
22644
|
+
async function listLinearTeamCycles(teamId, opts) {
|
|
22645
|
+
const json = await linearGraphql(TEAM_CYCLES_QUERY, { id: teamId }, opts);
|
|
22646
|
+
if (!json.team?.id) {
|
|
22647
|
+
throw new Error(`Linear team not found: ${teamId}`);
|
|
22648
|
+
}
|
|
22649
|
+
const mapped = mapTeam(json.team);
|
|
22650
|
+
return {
|
|
22651
|
+
id: mapped.id,
|
|
22652
|
+
key: mapped.key,
|
|
22653
|
+
activeCycle: mapped.activeCycle,
|
|
22654
|
+
cycles: mapped.cycles ?? []
|
|
22655
|
+
};
|
|
22656
|
+
}
|
|
22589
22657
|
async function getLinearIssue(id, opts) {
|
|
22590
22658
|
const issueId = id.trim();
|
|
22591
22659
|
if (!issueId) throw new Error("Linear issue id is required (uuid or ENG-123)");
|
|
@@ -22641,16 +22709,28 @@ async function updateLinearIssue(input, opts) {
|
|
|
22641
22709
|
if (input.description !== void 0) {
|
|
22642
22710
|
mutationInput.description = input.description;
|
|
22643
22711
|
}
|
|
22712
|
+
const needsTeam = Boolean(input.state?.trim()) || input.cycle !== void 0;
|
|
22713
|
+
const existing = needsTeam ? await getLinearIssue(issueId, opts) : void 0;
|
|
22644
22714
|
if (input.state?.trim()) {
|
|
22645
|
-
const existing = await getLinearIssue(issueId, opts);
|
|
22646
22715
|
const { teams } = await listLinearTeams(opts);
|
|
22647
|
-
const teamRef = existing
|
|
22716
|
+
const teamRef = existing?.team?.key || existing?.team?.id;
|
|
22648
22717
|
const team = teamRef ? resolveLinearTeam(teams, teamRef) : void 0;
|
|
22649
22718
|
if (!team?.states.length) {
|
|
22650
|
-
throw new Error(`Linear issue ${existing
|
|
22719
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no workflow states to resolve "${input.state}"`);
|
|
22651
22720
|
}
|
|
22652
22721
|
mutationInput.stateId = resolveLinearState(team, input.state).id;
|
|
22653
22722
|
}
|
|
22723
|
+
if (input.cycle !== void 0) {
|
|
22724
|
+
const teamId = existing?.team?.id;
|
|
22725
|
+
if (!teamId) {
|
|
22726
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no team to resolve a cycle`);
|
|
22727
|
+
}
|
|
22728
|
+
const cycles = await listLinearTeamCycles(teamId, opts);
|
|
22729
|
+
mutationInput.cycleId = resolveLinearCycle(
|
|
22730
|
+
{ ...cycles, key: cycles.key || existing?.team?.key || teamId },
|
|
22731
|
+
input.cycle
|
|
22732
|
+
);
|
|
22733
|
+
}
|
|
22654
22734
|
if (input.assignee !== void 0) {
|
|
22655
22735
|
const assignee = input.assignee?.trim() || null;
|
|
22656
22736
|
if (assignee === "me") {
|
|
@@ -22664,7 +22744,7 @@ async function updateLinearIssue(input, opts) {
|
|
|
22664
22744
|
mutationInput.priority = normalizePriority(input.priority);
|
|
22665
22745
|
}
|
|
22666
22746
|
if (Object.keys(mutationInput).length === 0) {
|
|
22667
|
-
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority");
|
|
22747
|
+
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority, cycle");
|
|
22668
22748
|
}
|
|
22669
22749
|
const json = await linearGraphql(ISSUE_UPDATE, { id: issueId, input: mutationInput }, opts);
|
|
22670
22750
|
if (!json.issueUpdate?.success || !json.issueUpdate.issue) {
|
|
@@ -24132,7 +24212,7 @@ var prioritySchema = import_zod6.z.number().int().min(0).max(4).optional().descr
|
|
|
24132
24212
|
function registerLinearTools(server) {
|
|
24133
24213
|
server.tool(
|
|
24134
24214
|
"linear_list_teams",
|
|
24135
|
-
|
|
24215
|
+
'List Linear teams (id, key, name), workflow states, and the active cycle. Use team key on create; state name or type on create/update; cycle name/"current"/"none" on update.',
|
|
24136
24216
|
{},
|
|
24137
24217
|
async () => {
|
|
24138
24218
|
try {
|
|
@@ -24219,14 +24299,15 @@ function registerLinearTools(server) {
|
|
|
24219
24299
|
);
|
|
24220
24300
|
server.tool(
|
|
24221
24301
|
"linear_update_issue",
|
|
24222
|
-
|
|
24302
|
+
'Update a Linear issue (uuid or ENG-123). Pass title, description, state, assignee, priority, and/or cycle. Cycle is name, number, "current"/"active", or "none" to unschedule. When reviewing a PR or ticket, wait until they type a next step before changing the ticket \u2014 do not ask_user after the review. The author is notified.',
|
|
24223
24303
|
{
|
|
24224
24304
|
id: import_zod6.z.string(),
|
|
24225
24305
|
title: import_zod6.z.string().optional(),
|
|
24226
24306
|
description: import_zod6.z.string().optional(),
|
|
24227
24307
|
state: import_zod6.z.string().optional(),
|
|
24228
24308
|
assignee: import_zod6.z.string().nullable().optional(),
|
|
24229
|
-
priority: prioritySchema
|
|
24309
|
+
priority: prioritySchema,
|
|
24310
|
+
cycle: import_zod6.z.string().nullable().optional().describe('Cycle name, number, "current"/"active", or "none" to unschedule.')
|
|
24230
24311
|
},
|
|
24231
24312
|
async (args) => {
|
|
24232
24313
|
try {
|
package/dist/mcp/run-stdio.js
CHANGED
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
syncBoardPins,
|
|
38
38
|
updateSchedule,
|
|
39
39
|
waitForDetachedJob
|
|
40
|
-
} from "../chunk-
|
|
40
|
+
} from "../chunk-LE5OZCKB.js";
|
|
41
41
|
import {
|
|
42
42
|
applySystemCaEnv,
|
|
43
43
|
isCursorApiKeyConfigured,
|
|
@@ -531,7 +531,7 @@ var LIST_ISSUE_FIELDS = `
|
|
|
531
531
|
assignee { id name }
|
|
532
532
|
team { id key }
|
|
533
533
|
labels(first: 10) { nodes { name } }
|
|
534
|
-
cycle { name number startsAt endsAt completedAt }
|
|
534
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
535
535
|
`;
|
|
536
536
|
var ISSUE_REF_FIELDS = `
|
|
537
537
|
id
|
|
@@ -557,7 +557,7 @@ var ISSUE_FIELDS = `
|
|
|
557
557
|
creator { id name }
|
|
558
558
|
team { id key name }
|
|
559
559
|
labels(first: 50) { nodes { name } }
|
|
560
|
-
cycle { name number startsAt endsAt completedAt }
|
|
560
|
+
cycle { id name number startsAt endsAt completedAt }
|
|
561
561
|
project { id name }
|
|
562
562
|
parent { ${ISSUE_REF_FIELDS} }
|
|
563
563
|
children(first: 25) { nodes { ${ISSUE_REF_FIELDS} } }
|
|
@@ -642,6 +642,19 @@ query SideboardTeams {
|
|
|
642
642
|
key
|
|
643
643
|
name
|
|
644
644
|
states(first: 50) { nodes { id name type } }
|
|
645
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
`;
|
|
650
|
+
var TEAM_CYCLES_QUERY = `
|
|
651
|
+
query SideboardTeamCycles($id: String!) {
|
|
652
|
+
team(id: $id) {
|
|
653
|
+
id
|
|
654
|
+
key
|
|
655
|
+
activeCycle { id name number startsAt endsAt completedAt }
|
|
656
|
+
cycles(first: 40) {
|
|
657
|
+
nodes { id name number startsAt endsAt completedAt }
|
|
645
658
|
}
|
|
646
659
|
}
|
|
647
660
|
}
|
|
@@ -734,11 +747,26 @@ function linearCycleIsActive(cycle, now = Date.now()) {
|
|
|
734
747
|
if (Number.isFinite(end) && now > end) return false;
|
|
735
748
|
return true;
|
|
736
749
|
}
|
|
750
|
+
function cycleDisplayName(node) {
|
|
751
|
+
return String(node?.name ?? (node?.number != null ? `Cycle ${node.number}` : "")).trim();
|
|
752
|
+
}
|
|
753
|
+
function mapNamedCycle(node) {
|
|
754
|
+
if (!node?.id) return null;
|
|
755
|
+
const name = cycleDisplayName(node);
|
|
756
|
+
if (!name) return null;
|
|
757
|
+
return {
|
|
758
|
+
id: String(node.id),
|
|
759
|
+
name,
|
|
760
|
+
number: typeof node.number === "number" ? node.number : void 0,
|
|
761
|
+
isActive: linearCycleIsActive(node)
|
|
762
|
+
};
|
|
763
|
+
}
|
|
737
764
|
function mapCycle(node) {
|
|
738
765
|
if (!node?.name && node?.number == null) return null;
|
|
739
|
-
const name =
|
|
766
|
+
const name = cycleDisplayName(node);
|
|
740
767
|
if (!name) return null;
|
|
741
768
|
return {
|
|
769
|
+
...node.id ? { id: String(node.id) } : {},
|
|
742
770
|
name,
|
|
743
771
|
number: typeof node.number === "number" ? node.number : void 0,
|
|
744
772
|
isActive: linearCycleIsActive(node)
|
|
@@ -877,6 +905,10 @@ function toIssueInfo(issue) {
|
|
|
877
905
|
};
|
|
878
906
|
}
|
|
879
907
|
function mapTeam(node) {
|
|
908
|
+
const cycles = (node.cycles?.nodes ?? []).flatMap((c) => {
|
|
909
|
+
const cycle = mapNamedCycle(c);
|
|
910
|
+
return cycle ? [cycle] : [];
|
|
911
|
+
});
|
|
880
912
|
return {
|
|
881
913
|
id: String(node.id ?? ""),
|
|
882
914
|
key: String(node.key ?? ""),
|
|
@@ -884,7 +916,9 @@ function mapTeam(node) {
|
|
|
884
916
|
states: (node.states?.nodes ?? []).flatMap((s) => {
|
|
885
917
|
const state = mapState(s);
|
|
886
918
|
return state ? [state] : [];
|
|
887
|
-
})
|
|
919
|
+
}),
|
|
920
|
+
activeCycle: mapNamedCycle(node.activeCycle),
|
|
921
|
+
...cycles.length ? { cycles } : {}
|
|
888
922
|
};
|
|
889
923
|
}
|
|
890
924
|
function resolveLinearTeam(teams, team) {
|
|
@@ -911,6 +945,27 @@ function resolveLinearState(team, state) {
|
|
|
911
945
|
}
|
|
912
946
|
return found;
|
|
913
947
|
}
|
|
948
|
+
function resolveLinearCycle(team, cycle) {
|
|
949
|
+
if (cycle == null) return null;
|
|
950
|
+
const s = cycle.trim();
|
|
951
|
+
if (!s || /^(none|clear|unschedule|null)$/i.test(s)) return null;
|
|
952
|
+
if (/^(current|active|this)$/i.test(s)) {
|
|
953
|
+
const active = team.activeCycle ?? team.cycles?.find((c) => c.isActive);
|
|
954
|
+
if (!active?.id) {
|
|
955
|
+
throw new Error(`Linear team ${team.key} has no active cycle`);
|
|
956
|
+
}
|
|
957
|
+
return active.id;
|
|
958
|
+
}
|
|
959
|
+
const lower = s.toLowerCase();
|
|
960
|
+
const asNumber = Number.parseInt(s, 10);
|
|
961
|
+
const cycles = team.cycles ?? [];
|
|
962
|
+
const found = cycles.find((c) => c.id === s) || cycles.find((c) => c.name.toLowerCase() === lower) || (Number.isInteger(asNumber) ? cycles.find((c) => c.number === asNumber) : void 0);
|
|
963
|
+
if (!found) {
|
|
964
|
+
const available = cycles.map((c) => c.number != null ? `${c.name} (${c.number})` : c.name).join(", ") || "(none)";
|
|
965
|
+
throw new Error(`Linear cycle not found on ${team.key}: ${cycle}. Available: ${available}`);
|
|
966
|
+
}
|
|
967
|
+
return found.id;
|
|
968
|
+
}
|
|
914
969
|
function normalizePriority(priority) {
|
|
915
970
|
if (priority == null) return void 0;
|
|
916
971
|
if (!Number.isInteger(priority) || priority < 0 || priority > 4) {
|
|
@@ -1052,6 +1107,19 @@ async function listLinearTeams(opts) {
|
|
|
1052
1107
|
teams: (json.teams?.nodes ?? []).map(mapTeam)
|
|
1053
1108
|
};
|
|
1054
1109
|
}
|
|
1110
|
+
async function listLinearTeamCycles(teamId, opts) {
|
|
1111
|
+
const json = await linearGraphql(TEAM_CYCLES_QUERY, { id: teamId }, opts);
|
|
1112
|
+
if (!json.team?.id) {
|
|
1113
|
+
throw new Error(`Linear team not found: ${teamId}`);
|
|
1114
|
+
}
|
|
1115
|
+
const mapped = mapTeam(json.team);
|
|
1116
|
+
return {
|
|
1117
|
+
id: mapped.id,
|
|
1118
|
+
key: mapped.key,
|
|
1119
|
+
activeCycle: mapped.activeCycle,
|
|
1120
|
+
cycles: mapped.cycles ?? []
|
|
1121
|
+
};
|
|
1122
|
+
}
|
|
1055
1123
|
async function getLinearIssue(id, opts) {
|
|
1056
1124
|
const issueId = id.trim();
|
|
1057
1125
|
if (!issueId) throw new Error("Linear issue id is required (uuid or ENG-123)");
|
|
@@ -1107,16 +1175,28 @@ async function updateLinearIssue(input, opts) {
|
|
|
1107
1175
|
if (input.description !== void 0) {
|
|
1108
1176
|
mutationInput.description = input.description;
|
|
1109
1177
|
}
|
|
1178
|
+
const needsTeam = Boolean(input.state?.trim()) || input.cycle !== void 0;
|
|
1179
|
+
const existing = needsTeam ? await getLinearIssue(issueId, opts) : void 0;
|
|
1110
1180
|
if (input.state?.trim()) {
|
|
1111
|
-
const existing = await getLinearIssue(issueId, opts);
|
|
1112
1181
|
const { teams } = await listLinearTeams(opts);
|
|
1113
|
-
const teamRef = existing
|
|
1182
|
+
const teamRef = existing?.team?.key || existing?.team?.id;
|
|
1114
1183
|
const team = teamRef ? resolveLinearTeam(teams, teamRef) : void 0;
|
|
1115
1184
|
if (!team?.states.length) {
|
|
1116
|
-
throw new Error(`Linear issue ${existing
|
|
1185
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no workflow states to resolve "${input.state}"`);
|
|
1117
1186
|
}
|
|
1118
1187
|
mutationInput.stateId = resolveLinearState(team, input.state).id;
|
|
1119
1188
|
}
|
|
1189
|
+
if (input.cycle !== void 0) {
|
|
1190
|
+
const teamId = existing?.team?.id;
|
|
1191
|
+
if (!teamId) {
|
|
1192
|
+
throw new Error(`Linear issue ${existing?.identifier ?? issueId} has no team to resolve a cycle`);
|
|
1193
|
+
}
|
|
1194
|
+
const cycles = await listLinearTeamCycles(teamId, opts);
|
|
1195
|
+
mutationInput.cycleId = resolveLinearCycle(
|
|
1196
|
+
{ ...cycles, key: cycles.key || existing?.team?.key || teamId },
|
|
1197
|
+
input.cycle
|
|
1198
|
+
);
|
|
1199
|
+
}
|
|
1120
1200
|
if (input.assignee !== void 0) {
|
|
1121
1201
|
const assignee = input.assignee?.trim() || null;
|
|
1122
1202
|
if (assignee === "me") {
|
|
@@ -1130,7 +1210,7 @@ async function updateLinearIssue(input, opts) {
|
|
|
1130
1210
|
mutationInput.priority = normalizePriority(input.priority);
|
|
1131
1211
|
}
|
|
1132
1212
|
if (Object.keys(mutationInput).length === 0) {
|
|
1133
|
-
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority");
|
|
1213
|
+
throw new Error("linear_update_issue needs at least one of title, description, state, assignee, priority, cycle");
|
|
1134
1214
|
}
|
|
1135
1215
|
const json = await linearGraphql(ISSUE_UPDATE, { id: issueId, input: mutationInput }, opts);
|
|
1136
1216
|
if (!json.issueUpdate?.success || !json.issueUpdate.issue) {
|
|
@@ -2573,7 +2653,7 @@ var prioritySchema = z6.number().int().min(0).max(4).optional().describe("0 none
|
|
|
2573
2653
|
function registerLinearTools(server) {
|
|
2574
2654
|
server.tool(
|
|
2575
2655
|
"linear_list_teams",
|
|
2576
|
-
|
|
2656
|
+
'List Linear teams (id, key, name), workflow states, and the active cycle. Use team key on create; state name or type on create/update; cycle name/"current"/"none" on update.',
|
|
2577
2657
|
{},
|
|
2578
2658
|
async () => {
|
|
2579
2659
|
try {
|
|
@@ -2660,14 +2740,15 @@ function registerLinearTools(server) {
|
|
|
2660
2740
|
);
|
|
2661
2741
|
server.tool(
|
|
2662
2742
|
"linear_update_issue",
|
|
2663
|
-
|
|
2743
|
+
'Update a Linear issue (uuid or ENG-123). Pass title, description, state, assignee, priority, and/or cycle. Cycle is name, number, "current"/"active", or "none" to unschedule. When reviewing a PR or ticket, wait until they type a next step before changing the ticket \u2014 do not ask_user after the review. The author is notified.',
|
|
2664
2744
|
{
|
|
2665
2745
|
id: z6.string(),
|
|
2666
2746
|
title: z6.string().optional(),
|
|
2667
2747
|
description: z6.string().optional(),
|
|
2668
2748
|
state: z6.string().optional(),
|
|
2669
2749
|
assignee: z6.string().nullable().optional(),
|
|
2670
|
-
priority: prioritySchema
|
|
2750
|
+
priority: prioritySchema,
|
|
2751
|
+
cycle: z6.string().nullable().optional().describe('Cycle name, number, "current"/"active", or "none" to unschedule.')
|
|
2671
2752
|
},
|
|
2672
2753
|
async (args) => {
|
|
2673
2754
|
try {
|