@sideboard-ai/core 0.1.152 → 0.1.153
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/{abletime-223A3LY6.js → abletime-H7LPGIP2.js} +3 -3
- package/dist/{abletime-CLC5UJC2.js → abletime-JSTJLXAW.js} +3 -3
- package/dist/agents/cursor-runner.js +2 -2
- package/dist/{agents-CUKWIM34.js → agents-V24DYZI4.js} +8 -9
- package/dist/{agents-VHXCBBBD.js → agents-YVW75KBO.js} +8 -9
- package/dist/{app-settings-3CHCNIMD.js → app-settings-H3INSR67.js} +38 -4
- package/dist/{app-settings-J3JBCUOT.js → app-settings-VRQI3FIE.js} +38 -4
- package/dist/{caffeinate-hold-NBRUWYXO.js → caffeinate-hold-DBKMRZZO.js} +2 -2
- package/dist/{caffeinate-hold-X3JNPR42.js → caffeinate-hold-SK2QISPE.js} +2 -2
- package/dist/chunk-2F63IMCL.js +959 -0
- package/dist/{chunk-7BQNSUR2.js → chunk-2NRNP7QP.js} +357 -185
- package/dist/{chunk-4XNSGDXE.js → chunk-3BWVOUQG.js} +244 -1
- package/dist/{chunk-EY6QXPPO.js → chunk-4THE3EY7.js} +6 -6
- package/dist/{chunk-TUGKX5BD.js → chunk-7UURXPKD.js} +1 -1
- package/dist/{chunk-DCOZABNT.js → chunk-AO35MGOE.js} +1 -1
- package/dist/{chunk-3JBMACYX.js → chunk-CJQLPPEJ.js} +387 -15
- package/dist/{chunk-CZD4NRDZ.js → chunk-D7EGJ3EI.js} +244 -1
- package/dist/{chunk-QZQEXME2.js → chunk-EFVFB2AH.js} +1 -1
- package/dist/{chunk-B7XK37WZ.js → chunk-FDCFXMDG.js} +1 -1
- package/dist/{chunk-WLV7TRMR.js → chunk-JOK4XWBG.js} +1 -1
- package/dist/{chunk-BD2ICC4D.js → chunk-JTJHOYCU.js} +1 -1
- package/dist/{chunk-6X7Z34XE.js → chunk-KMNODRWF.js} +397 -173
- package/dist/{chunk-GE7M3QTE.js → chunk-LQMFCS54.js} +387 -15
- package/dist/{chunk-G7SIQFBQ.js → chunk-LZ6QMEQC.js} +1 -1
- package/dist/{chunk-EUXOHTUK.js → chunk-LZQULFIT.js} +1 -1
- package/dist/{chunk-KLBOWJ74.js → chunk-OCQPTUR7.js} +1 -1
- package/dist/{chunk-GFQ57XAX.js → chunk-QZEZXYVV.js} +13 -13
- package/dist/chunk-RNC3GR6L.js +905 -0
- package/dist/{chunk-VHX673DI.js → chunk-WLPXZFRE.js} +1 -1
- package/dist/{chunk-7F4XE6UG.js → chunk-XD2BAANL.js} +5 -5
- package/dist/{connected-teams-XO766HB4.js → connected-teams-DBWAMP7G.js} +2 -2
- package/dist/{connected-teams-I2WZZZFA.js → connected-teams-WGONUQOF.js} +2 -2
- package/dist/{coordinator-prompt-WGFRYCHE.js → coordinator-prompt-7FHKCWXB.js} +5 -5
- package/dist/{coordinator-prompt-TBX4MOFM.js → coordinator-prompt-KX2FVVYT.js} +5 -5
- package/dist/{cursor-recover-NOQYOFRF.js → cursor-recover-L5MD6MBO.js} +1 -1
- package/dist/{cursor-recover-QSLWEZNA.js → cursor-recover-NDMLLNYX.js} +2 -2
- package/dist/{global-workspace-IY5QAV5C.js → global-workspace-2BRRKSDN.js} +5 -6
- package/dist/{global-workspace-BHLUJ46D.js → global-workspace-4LHCZ2DC.js} +5 -6
- package/dist/index.cjs +1875 -765
- package/dist/index.d.cts +195 -11
- package/dist/index.d.ts +195 -11
- package/dist/index.js +298 -108
- package/dist/mcp/run-stdio.cjs +1743 -1228
- package/dist/mcp/run-stdio.js +232 -80
- package/dist/{orchestrator-NUA6SEV7.js → orchestrator-5PSHBLP6.js} +10 -12
- package/dist/{orchestrator-256DFPSX.js → orchestrator-ZSSU3FKW.js} +9 -11
- package/dist/{paths-UMEDHOS5.js → paths-53TLA7VQ.js} +1 -1
- package/dist/{paths-QCI3MTO5.js → paths-RRCLNSJB.js} +1 -1
- package/dist/{thread-store-WGASXXXR.js → thread-store-KBFBHT5G.js} +2 -2
- package/dist/{thread-store-57ZLHR3A.js → thread-store-MVQU6HPJ.js} +2 -2
- package/dist/{workspaces-4FSXVIZM.js → workspaces-5UNDTN4G.js} +5 -7
- package/dist/{workspaces-NECIQTAO.js → workspaces-MQYNZXUK.js} +5 -7
- package/dist/{worktree-HTUM35NT.js → worktree-PEWDAX5O.js} +4 -4
- package/dist/{worktree-DPIREDFR.js → worktree-T4SWFSTT.js} +4 -4
- package/package.json +1 -1
- package/dist/chunk-2U6QF3PT.js +0 -211
- package/dist/chunk-67TIJ7S5.js +0 -122
- package/dist/chunk-7TIUOYBK.js +0 -213
- package/dist/chunk-G4MTYUWS.js +0 -592
- package/dist/chunk-K2ANSHUO.js +0 -120
- package/dist/chunk-SN6CMKF6.js +0 -538
package/dist/index.js
CHANGED
|
@@ -72,6 +72,7 @@ import {
|
|
|
72
72
|
disconnectOptionalService,
|
|
73
73
|
disconnectSlackWorkspace,
|
|
74
74
|
discoverSkills,
|
|
75
|
+
emptySetupLog,
|
|
75
76
|
ensureReviewGuidelinesFile,
|
|
76
77
|
ensureReviewRequestFile,
|
|
77
78
|
ensureReviewSkillFile,
|
|
@@ -86,6 +87,7 @@ import {
|
|
|
86
87
|
findBoardPr,
|
|
87
88
|
findLastBrightsyContextSummary,
|
|
88
89
|
findLiveThreadForCreate,
|
|
90
|
+
findLiveThreadForCreateSource,
|
|
89
91
|
findOrphanWorktrees,
|
|
90
92
|
findThreadForStackLayer,
|
|
91
93
|
fireSchedule,
|
|
@@ -152,6 +154,7 @@ import {
|
|
|
152
154
|
listWorktreeFiles,
|
|
153
155
|
loadAgentInstructions,
|
|
154
156
|
maybeCompactContext,
|
|
157
|
+
mergeSetupOutput,
|
|
155
158
|
messagesSinceLastBrightsyContextSummary,
|
|
156
159
|
normalizeServiceOrigin,
|
|
157
160
|
openPrStackLayers,
|
|
@@ -164,6 +167,7 @@ import {
|
|
|
164
167
|
pollSlackOutboundWatches,
|
|
165
168
|
previewLand,
|
|
166
169
|
readExistingReviewRequestFile,
|
|
170
|
+
readSetupLog,
|
|
167
171
|
readSkillBody,
|
|
168
172
|
readTurnLive,
|
|
169
173
|
readWorktreeFile,
|
|
@@ -216,7 +220,7 @@ import {
|
|
|
216
220
|
worktreeCleanupSettings,
|
|
217
221
|
wrapReviewSkillMarkdown,
|
|
218
222
|
writeWorktreeFile
|
|
219
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-KMNODRWF.js";
|
|
220
224
|
import {
|
|
221
225
|
LEGACY_PLAN_FILE_REL,
|
|
222
226
|
PLAN_FILE_NAME,
|
|
@@ -310,49 +314,33 @@ import {
|
|
|
310
314
|
withEventParentId,
|
|
311
315
|
withEventsParentId,
|
|
312
316
|
writeInjectedMcpConfig
|
|
313
|
-
} from "./chunk-
|
|
314
|
-
import {
|
|
315
|
-
brightsyMcpServerName,
|
|
316
|
-
connectBrightsyTeam,
|
|
317
|
-
disconnectBrightsyTeam,
|
|
318
|
-
ensureConnectedBrightsyTeamTokens,
|
|
319
|
-
getBrightsySession,
|
|
320
|
-
listBrightsyAccounts,
|
|
321
|
-
listConnectedBrightsyTeams,
|
|
322
|
-
switchBrightsyAccount
|
|
323
|
-
} from "./chunk-7F4XE6UG.js";
|
|
324
|
-
import {
|
|
325
|
-
brightsyAccessTokenNeedsRefresh,
|
|
326
|
-
brightsyConfigPath,
|
|
327
|
-
ensureBrightsyLocalConfigFresh,
|
|
328
|
-
loadBrightsyConfig,
|
|
329
|
-
refreshBrightsyAccessToken,
|
|
330
|
-
saveBrightsyConfig
|
|
331
|
-
} from "./chunk-M267JPEA.js";
|
|
332
|
-
import {
|
|
333
|
-
addWorkspace,
|
|
334
|
-
ensureWorkspace,
|
|
335
|
-
listWorkspaces,
|
|
336
|
-
removeWorkspace,
|
|
337
|
-
syncWorkspacesFromThreads
|
|
338
|
-
} from "./chunk-K2ANSHUO.js";
|
|
317
|
+
} from "./chunk-QZEZXYVV.js";
|
|
339
318
|
import {
|
|
340
319
|
CLOUD_COORDINATOR_BUSY_REPLY,
|
|
341
320
|
CLOUD_COORDINATOR_STOPPED_REPLY,
|
|
342
321
|
CLOUD_COORDINATOR_TIMEOUT_REPLY,
|
|
343
322
|
CLOUD_ORCHESTRATOR_GOAL,
|
|
323
|
+
COORDINATOR_TOOL_PLAYBOOK,
|
|
344
324
|
GLOBAL_WORKSPACE_ID,
|
|
345
325
|
ORCHESTRATOR_AGENT_KINDS,
|
|
346
326
|
SIDEBOARD_FORCE_STOP,
|
|
327
|
+
SLACK_REPLY_FORMATTING,
|
|
328
|
+
addWorkspace,
|
|
347
329
|
assertOrchestratorCapableAgent,
|
|
348
330
|
attachmentFromAbsolutePath,
|
|
349
331
|
attachmentsFromBuffers,
|
|
350
332
|
attachmentsFromWorktreePaths,
|
|
351
333
|
coerceOrchestratorAgent,
|
|
334
|
+
coordinatorSystemPrompt,
|
|
335
|
+
coordinatorTurnReminder,
|
|
352
336
|
createGlobalChat,
|
|
337
|
+
enrichWorkspacesWithGithub,
|
|
353
338
|
ensureCloudCoordinator,
|
|
339
|
+
ensureGlobalCoordinatorCwd,
|
|
354
340
|
ensureSlackCoordinator,
|
|
341
|
+
ensureWorkspace,
|
|
355
342
|
findSlackCoordinator,
|
|
343
|
+
formatWorkspaceInventory,
|
|
356
344
|
healOrchestrationSoccerTitles,
|
|
357
345
|
isCloudCoordinatorThread,
|
|
358
346
|
isGlobalRepoPath,
|
|
@@ -362,24 +350,18 @@ import {
|
|
|
362
350
|
isOrchestratorThread,
|
|
363
351
|
isSlackCoordinatorThread,
|
|
364
352
|
listGlobalThreads,
|
|
353
|
+
listWorkspaces,
|
|
365
354
|
orchestrationTitleNeedsSoccerNickname,
|
|
366
355
|
orchestratorSessionPoisonedByBuiltins,
|
|
367
356
|
parseForceStopMessage,
|
|
368
357
|
persistPendingFileAttachments,
|
|
358
|
+
removeWorkspace,
|
|
369
359
|
slackCoordinatorSourceRef,
|
|
370
360
|
stageAbsolutePathsAsAttachments,
|
|
371
361
|
stageBuffersAsAttachments,
|
|
362
|
+
syncWorkspacesFromThreads,
|
|
372
363
|
takenTeamSlugsForOrchestration
|
|
373
|
-
} from "./chunk-
|
|
374
|
-
import {
|
|
375
|
-
COORDINATOR_TOOL_PLAYBOOK,
|
|
376
|
-
SLACK_REPLY_FORMATTING,
|
|
377
|
-
coordinatorSystemPrompt,
|
|
378
|
-
coordinatorTurnReminder,
|
|
379
|
-
enrichWorkspacesWithGithub,
|
|
380
|
-
ensureGlobalCoordinatorCwd,
|
|
381
|
-
formatWorkspaceInventory
|
|
382
|
-
} from "./chunk-2U6QF3PT.js";
|
|
364
|
+
} from "./chunk-2F63IMCL.js";
|
|
383
365
|
import {
|
|
384
366
|
FAMOUS_SOCCER_TEAMS,
|
|
385
367
|
GITHUB_PR_BODY_MAX_CHARS,
|
|
@@ -457,6 +439,7 @@ import {
|
|
|
457
439
|
resolveDiffBaseRef,
|
|
458
440
|
resolveGithubAgentToken,
|
|
459
441
|
resolveGithubRepoSlug,
|
|
442
|
+
resolveListPrsOptions,
|
|
460
443
|
resolvePrSelector,
|
|
461
444
|
resolvePrSelectors,
|
|
462
445
|
resolveRepoRoot,
|
|
@@ -471,7 +454,7 @@ import {
|
|
|
471
454
|
worktreeDisplayLabel,
|
|
472
455
|
worktreeDisplayLabelForGroup,
|
|
473
456
|
worktreeNameFromPath
|
|
474
|
-
} from "./chunk-
|
|
457
|
+
} from "./chunk-LQMFCS54.js";
|
|
475
458
|
import {
|
|
476
459
|
ATTACHMENTS_DIR,
|
|
477
460
|
DETACHED_JOBS_DIR,
|
|
@@ -480,6 +463,24 @@ import {
|
|
|
480
463
|
attachmentsGitignoreBody,
|
|
481
464
|
isWorkspaceScratchPath
|
|
482
465
|
} from "./chunk-JRH62XC4.js";
|
|
466
|
+
import {
|
|
467
|
+
brightsyMcpServerName,
|
|
468
|
+
connectBrightsyTeam,
|
|
469
|
+
disconnectBrightsyTeam,
|
|
470
|
+
ensureConnectedBrightsyTeamTokens,
|
|
471
|
+
getBrightsySession,
|
|
472
|
+
listBrightsyAccounts,
|
|
473
|
+
listConnectedBrightsyTeams,
|
|
474
|
+
switchBrightsyAccount
|
|
475
|
+
} from "./chunk-XD2BAANL.js";
|
|
476
|
+
import {
|
|
477
|
+
brightsyAccessTokenNeedsRefresh,
|
|
478
|
+
brightsyConfigPath,
|
|
479
|
+
ensureBrightsyLocalConfigFresh,
|
|
480
|
+
loadBrightsyConfig,
|
|
481
|
+
refreshBrightsyAccessToken,
|
|
482
|
+
saveBrightsyConfig
|
|
483
|
+
} from "./chunk-M267JPEA.js";
|
|
483
484
|
import {
|
|
484
485
|
ABLETIME_MCP_PATH,
|
|
485
486
|
DEFAULT_ABLETIME_HOST,
|
|
@@ -501,7 +502,7 @@ import {
|
|
|
501
502
|
taskUrl,
|
|
502
503
|
toAbleTimeIssueInfo,
|
|
503
504
|
verifyAbleTimeConnection
|
|
504
|
-
} from "./chunk-
|
|
505
|
+
} from "./chunk-JOK4XWBG.js";
|
|
505
506
|
import {
|
|
506
507
|
formatFetchError,
|
|
507
508
|
httpFetch,
|
|
@@ -518,10 +519,16 @@ import {
|
|
|
518
519
|
withMaxOldSpaceSize
|
|
519
520
|
} from "./chunk-HEII7W3Q.js";
|
|
520
521
|
import {
|
|
522
|
+
ACCOUNT_ROLES,
|
|
523
|
+
ACCOUNT_ROLE_LABELS,
|
|
524
|
+
ACCOUNT_ROLE_MAX,
|
|
525
|
+
ACCOUNT_ROLE_PRESETS,
|
|
521
526
|
FOLLOW_UP_BEHAVIORS,
|
|
522
527
|
GITHUB_GIT_AUTH_MODES,
|
|
523
528
|
HARNESS_ENV_KEYS,
|
|
524
529
|
ISSUE_SOURCE_LABELS,
|
|
530
|
+
PROFILE_NOTES_MAX,
|
|
531
|
+
accountRoleLabel,
|
|
525
532
|
appSettingsPath,
|
|
526
533
|
applyAppEnvironment,
|
|
527
534
|
autoArchiveOnMergeEnabled,
|
|
@@ -544,7 +551,11 @@ import {
|
|
|
544
551
|
disconnectLinearConnection,
|
|
545
552
|
emptyPublicIntegrations,
|
|
546
553
|
ensureSlackDeviceIdentity,
|
|
554
|
+
findProjectProfileKey,
|
|
547
555
|
followUpBehavior,
|
|
556
|
+
formatAccountProfilePlaybookLine,
|
|
557
|
+
formatProjectProfilePlaybookLines,
|
|
558
|
+
formatWorkspaceProfileSuffix,
|
|
548
559
|
getAbleTimeAccessToken,
|
|
549
560
|
getAbleTimeHost,
|
|
550
561
|
getDefaultAgent,
|
|
@@ -565,13 +576,19 @@ import {
|
|
|
565
576
|
orchestrationQuotaFallbackAgent,
|
|
566
577
|
orchestrationQuotaOnLimit,
|
|
567
578
|
persistVaultKeyInKeychain,
|
|
579
|
+
preferTeamsForRole,
|
|
568
580
|
readKeychainVaultKey,
|
|
581
|
+
resolveAccountProfile,
|
|
582
|
+
resolveAccountProfileFromSettings,
|
|
569
583
|
resolveAgentExecutable,
|
|
570
584
|
resolveClaudeExecutable,
|
|
571
585
|
resolveEffectiveIssueSource,
|
|
572
586
|
resolveNewThreadOptions,
|
|
573
587
|
resolveThreadDefaults,
|
|
574
588
|
resolveVaultKey,
|
|
589
|
+
resolveViewerProfile,
|
|
590
|
+
resolveViewerProfileForRepo,
|
|
591
|
+
reviewTeamHintsForRoles,
|
|
575
592
|
saveAbleTimeConnection,
|
|
576
593
|
saveAppSettings,
|
|
577
594
|
saveLinearOAuth,
|
|
@@ -589,8 +606,9 @@ import {
|
|
|
589
606
|
updateCodexSettings,
|
|
590
607
|
updateDefaultsSettings,
|
|
591
608
|
updateIntegrationsSettings,
|
|
592
|
-
updateOpencodeSettings
|
|
593
|
-
|
|
609
|
+
updateOpencodeSettings,
|
|
610
|
+
updateProjectProfileSettings
|
|
611
|
+
} from "./chunk-3BWVOUQG.js";
|
|
594
612
|
import {
|
|
595
613
|
stripNestedElectronEnv
|
|
596
614
|
} from "./chunk-4TR3HZFT.js";
|
|
@@ -600,7 +618,7 @@ import {
|
|
|
600
618
|
isThreadCaffeinated,
|
|
601
619
|
releaseCaffeinateHoldForThread,
|
|
602
620
|
setCaffeinateHold
|
|
603
|
-
} from "./chunk-
|
|
621
|
+
} from "./chunk-AO35MGOE.js";
|
|
604
622
|
import "./chunk-JT7R45JB.js";
|
|
605
623
|
import {
|
|
606
624
|
appendMessage,
|
|
@@ -617,7 +635,7 @@ import {
|
|
|
617
635
|
updateThread,
|
|
618
636
|
withThreadLock,
|
|
619
637
|
writeThread
|
|
620
|
-
} from "./chunk-
|
|
638
|
+
} from "./chunk-7UURXPKD.js";
|
|
621
639
|
import {
|
|
622
640
|
THINKING_EFFORTS,
|
|
623
641
|
isThinkingEffort,
|
|
@@ -653,7 +671,7 @@ import {
|
|
|
653
671
|
threadsDir,
|
|
654
672
|
workspaceSettingsSourceLabel,
|
|
655
673
|
worktreesRoot
|
|
656
|
-
} from "./chunk-
|
|
674
|
+
} from "./chunk-EFVFB2AH.js";
|
|
657
675
|
import "./chunk-QQKDGPUI.js";
|
|
658
676
|
import {
|
|
659
677
|
conductorBundledBinDir,
|
|
@@ -1021,7 +1039,7 @@ var ISSUE_FIELDS = `
|
|
|
1021
1039
|
state { id name type }
|
|
1022
1040
|
assignee { id name }
|
|
1023
1041
|
creator { id name }
|
|
1024
|
-
team { id key name
|
|
1042
|
+
team { id key name }
|
|
1025
1043
|
labels(first: 50) { nodes { name } }
|
|
1026
1044
|
cycle { name number startsAt endsAt completedAt }
|
|
1027
1045
|
project { id name }
|
|
@@ -1502,7 +1520,9 @@ async function updateLinearIssue(input, opts) {
|
|
|
1502
1520
|
}
|
|
1503
1521
|
if (input.state?.trim()) {
|
|
1504
1522
|
const existing = await getLinearIssue(issueId, opts);
|
|
1505
|
-
const
|
|
1523
|
+
const { teams } = await listLinearTeams(opts);
|
|
1524
|
+
const teamRef = existing.team?.key || existing.team?.id;
|
|
1525
|
+
const team = teamRef ? resolveLinearTeam(teams, teamRef) : void 0;
|
|
1506
1526
|
if (!team?.states.length) {
|
|
1507
1527
|
throw new Error(`Linear issue ${existing.identifier} has no workflow states to resolve "${input.state}"`);
|
|
1508
1528
|
}
|
|
@@ -1559,6 +1579,11 @@ async function validateLinearApiKey(apiKey) {
|
|
|
1559
1579
|
function assigneeKey(assignee) {
|
|
1560
1580
|
return (assignee ?? "").trim().toLowerCase();
|
|
1561
1581
|
}
|
|
1582
|
+
function takeIssuePage(issues, limit) {
|
|
1583
|
+
if (limit == null) return issues;
|
|
1584
|
+
const n = Math.max(1, Math.min(1e3, Math.floor(limit)));
|
|
1585
|
+
return issues.slice(0, n);
|
|
1586
|
+
}
|
|
1562
1587
|
function issueMatchesAssignee(issue, assignee, viewerName = "") {
|
|
1563
1588
|
const key = assigneeKey(assignee);
|
|
1564
1589
|
if (!key || key === "all" || key === "*") return true;
|
|
@@ -1660,13 +1685,33 @@ async function listIssues(repoPath, opts) {
|
|
|
1660
1685
|
};
|
|
1661
1686
|
}
|
|
1662
1687
|
if (source === "abletime") {
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1688
|
+
if (query) {
|
|
1689
|
+
const [searched, orientation] = await Promise.all([
|
|
1690
|
+
searchAbleTimeTasks(query),
|
|
1691
|
+
getAbleTimeOrientation().catch(() => null)
|
|
1692
|
+
]);
|
|
1693
|
+
const viewerName2 = orientation?.viewer.name ?? orientation?.viewer.id ?? "";
|
|
1694
|
+
const issues3 = takeIssuePage(
|
|
1695
|
+
searched.map(toAbleTimeIssueInfo).filter((issue) => issueMatchesAssignee(issue, assignee, viewerName2)),
|
|
1696
|
+
opts?.limit
|
|
1697
|
+
);
|
|
1698
|
+
return {
|
|
1699
|
+
source,
|
|
1700
|
+
preferredSource,
|
|
1701
|
+
linearConnected,
|
|
1702
|
+
abletimeConnected,
|
|
1703
|
+
issues: issues3,
|
|
1704
|
+
viewer: {
|
|
1705
|
+
login: orientation?.viewer.name,
|
|
1706
|
+
name: orientation?.viewer.name
|
|
1707
|
+
}
|
|
1708
|
+
};
|
|
1709
|
+
}
|
|
1710
|
+
const listed = await listAbleTimeAssignedIssues();
|
|
1667
1711
|
const viewerName = listed.viewer.name ?? listed.viewer.id ?? "";
|
|
1668
|
-
const issues2 = (
|
|
1669
|
-
(issue) => issueMatchesAssignee(issue, assignee, viewerName)
|
|
1712
|
+
const issues2 = takeIssuePage(
|
|
1713
|
+
listed.issues.filter((issue) => issueMatchesAssignee(issue, assignee, viewerName)),
|
|
1714
|
+
opts?.limit
|
|
1670
1715
|
);
|
|
1671
1716
|
return {
|
|
1672
1717
|
source,
|
|
@@ -2586,12 +2631,53 @@ function registerSlackTools(server) {
|
|
|
2586
2631
|
|
|
2587
2632
|
// src/mcp/abletime-tools.ts
|
|
2588
2633
|
import { z as z2 } from "zod";
|
|
2589
|
-
|
|
2634
|
+
|
|
2635
|
+
// src/mcp/issue-list.ts
|
|
2636
|
+
var MCP_ISSUE_LIST_DEFAULT_LIMIT = 40;
|
|
2637
|
+
var MCP_ISSUE_LIST_MAX_LIMIT = 250;
|
|
2638
|
+
function clampMcpIssueLimit(limit) {
|
|
2639
|
+
if (limit == null || !Number.isFinite(limit)) return MCP_ISSUE_LIST_DEFAULT_LIMIT;
|
|
2640
|
+
return Math.max(1, Math.min(MCP_ISSUE_LIST_MAX_LIMIT, Math.floor(limit)));
|
|
2641
|
+
}
|
|
2642
|
+
function applyIssueListWindow(items, limit) {
|
|
2643
|
+
const truncated = items.length > limit;
|
|
2590
2644
|
return {
|
|
2591
|
-
|
|
2645
|
+
items: truncated ? items.slice(0, limit) : items,
|
|
2646
|
+
truncated
|
|
2647
|
+
};
|
|
2648
|
+
}
|
|
2649
|
+
function compactIssueRow(issue) {
|
|
2650
|
+
return {
|
|
2651
|
+
identifier: issue.identifier,
|
|
2652
|
+
title: issue.title,
|
|
2653
|
+
...issue.assignee ? { assignee: issue.assignee } : {},
|
|
2654
|
+
...issue.labels.length > 0 ? { labels: issue.labels } : {},
|
|
2655
|
+
...issue.teamKey ? { team: issue.teamKey } : {},
|
|
2656
|
+
...issue.cycle?.name ? { cycle: issue.cycle.name } : {}
|
|
2657
|
+
};
|
|
2658
|
+
}
|
|
2659
|
+
function formatMcpIssueList(input) {
|
|
2660
|
+
return {
|
|
2661
|
+
...input.source ? { source: input.source } : {},
|
|
2662
|
+
...input.viewer ? { viewer: input.viewer } : {},
|
|
2663
|
+
limit: input.limit,
|
|
2664
|
+
returned: input.issues.length,
|
|
2665
|
+
truncated: input.truncated,
|
|
2666
|
+
...input.truncated ? { hint: "More issues match. Pass a higher limit (max 250) or a tighter query." } : {},
|
|
2667
|
+
issues: input.issues.map(compactIssueRow)
|
|
2668
|
+
};
|
|
2669
|
+
}
|
|
2670
|
+
function mcpJson(payload, isError = false) {
|
|
2671
|
+
return {
|
|
2672
|
+
content: [{ type: "text", text: JSON.stringify(payload) }],
|
|
2592
2673
|
...isError ? { isError: true } : {}
|
|
2593
2674
|
};
|
|
2594
2675
|
}
|
|
2676
|
+
|
|
2677
|
+
// src/mcp/abletime-tools.ts
|
|
2678
|
+
function text2(payload, isError = false) {
|
|
2679
|
+
return mcpJson(payload, isError);
|
|
2680
|
+
}
|
|
2595
2681
|
function fail2(err) {
|
|
2596
2682
|
return text2(
|
|
2597
2683
|
{ error: err instanceof Error ? err.message : String(err) },
|
|
@@ -2601,7 +2687,7 @@ function fail2(err) {
|
|
|
2601
2687
|
function registerAbleTimeTools(server) {
|
|
2602
2688
|
server.tool(
|
|
2603
2689
|
"abletime_orientation",
|
|
2604
|
-
"Call first when using AbleTime. Returns
|
|
2690
|
+
"Call first when using AbleTime. Returns viewer, active tasks, and projects.",
|
|
2605
2691
|
{},
|
|
2606
2692
|
async () => {
|
|
2607
2693
|
try {
|
|
@@ -2618,7 +2704,7 @@ function registerAbleTimeTools(server) {
|
|
|
2618
2704
|
);
|
|
2619
2705
|
server.tool(
|
|
2620
2706
|
"abletime_list_projects",
|
|
2621
|
-
"List AbleTime projects (and categories)
|
|
2707
|
+
"List AbleTime projects (and categories). Use a project id on create/ensure.",
|
|
2622
2708
|
{},
|
|
2623
2709
|
async () => {
|
|
2624
2710
|
try {
|
|
@@ -2686,7 +2772,7 @@ function registerAbleTimeTools(server) {
|
|
|
2686
2772
|
);
|
|
2687
2773
|
server.tool(
|
|
2688
2774
|
"abletime_ensure_task",
|
|
2689
|
-
"Find an
|
|
2775
|
+
"Find or create an AbleTime task for this work, then create_thread with sourceType=ticket.",
|
|
2690
2776
|
{
|
|
2691
2777
|
title: z2.string(),
|
|
2692
2778
|
description: z2.string().optional(),
|
|
@@ -2707,10 +2793,7 @@ function registerAbleTimeTools(server) {
|
|
|
2707
2793
|
// src/mcp/linear-tools.ts
|
|
2708
2794
|
import { z as z3 } from "zod";
|
|
2709
2795
|
function text3(payload, isError = false) {
|
|
2710
|
-
return
|
|
2711
|
-
content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
|
|
2712
|
-
...isError ? { isError: true } : {}
|
|
2713
|
-
};
|
|
2796
|
+
return mcpJson(payload, isError);
|
|
2714
2797
|
}
|
|
2715
2798
|
function fail3(err) {
|
|
2716
2799
|
return text3(
|
|
@@ -2722,7 +2805,7 @@ var prioritySchema = z3.number().int().min(0).max(4).optional().describe("0 none
|
|
|
2722
2805
|
function registerLinearTools(server) {
|
|
2723
2806
|
server.tool(
|
|
2724
2807
|
"linear_list_teams",
|
|
2725
|
-
"List Linear teams (id, key, name) and workflow states
|
|
2808
|
+
"List Linear teams (id, key, name) and workflow states. Use team key on create; state name or type on create/update.",
|
|
2726
2809
|
{},
|
|
2727
2810
|
async () => {
|
|
2728
2811
|
try {
|
|
@@ -2734,15 +2817,30 @@ function registerLinearTools(server) {
|
|
|
2734
2817
|
);
|
|
2735
2818
|
server.tool(
|
|
2736
2819
|
"linear_search_issues",
|
|
2737
|
-
"Search or list open Linear issues.
|
|
2820
|
+
"Search or list open Linear issues. Default 40; pass query and/or limit (max 250) when truncated. assignee: me, unassigned, all (default with query), or a user id/name.",
|
|
2738
2821
|
{
|
|
2739
2822
|
query: z3.string().optional().describe("Search text (identifier, title, description). Omit to list by assignee only."),
|
|
2740
2823
|
assignee: z3.string().optional().describe("me, unassigned, all, a Linear user id, or a display name. Default: all when query is set, otherwise me."),
|
|
2741
|
-
limit: z3.number().int().positive().max(250).optional()
|
|
2824
|
+
limit: z3.number().int().positive().max(250).optional().describe("Page size (default 40, max 250). Raise when truncated is true.")
|
|
2742
2825
|
},
|
|
2743
2826
|
async ({ query, assignee, limit }) => {
|
|
2744
2827
|
try {
|
|
2745
|
-
|
|
2828
|
+
const page = clampMcpIssueLimit(limit);
|
|
2829
|
+
const listed = await listLinearIssuesFiltered({
|
|
2830
|
+
query,
|
|
2831
|
+
assignee,
|
|
2832
|
+
limit: page + 1
|
|
2833
|
+
});
|
|
2834
|
+
const windowed = applyIssueListWindow(listed.issues, page);
|
|
2835
|
+
return mcpJson(
|
|
2836
|
+
formatMcpIssueList({
|
|
2837
|
+
source: "linear",
|
|
2838
|
+
viewer: listed.viewer.name,
|
|
2839
|
+
limit: page,
|
|
2840
|
+
issues: windowed.items,
|
|
2841
|
+
truncated: windowed.truncated
|
|
2842
|
+
})
|
|
2843
|
+
);
|
|
2746
2844
|
} catch (err) {
|
|
2747
2845
|
return fail3(err);
|
|
2748
2846
|
}
|
|
@@ -2750,7 +2848,7 @@ function registerLinearTools(server) {
|
|
|
2750
2848
|
);
|
|
2751
2849
|
server.tool(
|
|
2752
2850
|
"linear_get_issue",
|
|
2753
|
-
"Get a Linear issue by uuid or identifier (ENG-123)
|
|
2851
|
+
"Get a Linear issue by uuid or identifier (ENG-123): description, comments, relations, parent/children.",
|
|
2754
2852
|
{ id: z3.string() },
|
|
2755
2853
|
async ({ id }) => {
|
|
2756
2854
|
try {
|
|
@@ -2762,7 +2860,7 @@ function registerLinearTools(server) {
|
|
|
2762
2860
|
);
|
|
2763
2861
|
server.tool(
|
|
2764
2862
|
"linear_create_issue",
|
|
2765
|
-
'Create a Linear issue. Call linear_list_teams first. team is id
|
|
2863
|
+
'Create a Linear issue. Call linear_list_teams first. team is id/key/name; state is name/type/id; assignee is "me" or a user id.',
|
|
2766
2864
|
{
|
|
2767
2865
|
team: z3.string(),
|
|
2768
2866
|
title: z3.string(),
|
|
@@ -2781,7 +2879,7 @@ function registerLinearTools(server) {
|
|
|
2781
2879
|
);
|
|
2782
2880
|
server.tool(
|
|
2783
2881
|
"linear_update_issue",
|
|
2784
|
-
|
|
2882
|
+
"Update a Linear issue (uuid or ENG-123). Pass title, description, state, assignee, and/or priority.",
|
|
2785
2883
|
{
|
|
2786
2884
|
id: z3.string(),
|
|
2787
2885
|
title: z3.string().optional(),
|
|
@@ -2815,6 +2913,46 @@ function registerLinearTools(server) {
|
|
|
2815
2913
|
);
|
|
2816
2914
|
}
|
|
2817
2915
|
|
|
2916
|
+
// src/mcp/issue-vendor-tools.ts
|
|
2917
|
+
function registerConnectedIssueVendorTools(server, settings = loadAppSettings()) {
|
|
2918
|
+
if (isLinearConnected(settings)) registerLinearTools(server);
|
|
2919
|
+
if (isAbleTimeConnected(settings)) registerAbleTimeTools(server);
|
|
2920
|
+
}
|
|
2921
|
+
|
|
2922
|
+
// src/mcp/pr-list.ts
|
|
2923
|
+
function compactPrRow(pr) {
|
|
2924
|
+
return {
|
|
2925
|
+
number: pr.number,
|
|
2926
|
+
title: pr.title,
|
|
2927
|
+
...pr.headRefName ? { head: pr.headRefName } : {},
|
|
2928
|
+
...pr.author?.login ? { author: pr.author.login } : {},
|
|
2929
|
+
...pr.state ? { state: pr.state } : {},
|
|
2930
|
+
...pr.isDraft ? { draft: true } : {},
|
|
2931
|
+
...pr.labels?.length ? { labels: pr.labels } : {},
|
|
2932
|
+
...pr.reviewers?.length ? { reviewers: pr.reviewers } : {},
|
|
2933
|
+
...pr.teams?.length ? { teams: pr.teams } : {},
|
|
2934
|
+
...pr.reviewDecision ? { reviewDecision: pr.reviewDecision } : {},
|
|
2935
|
+
...pr.tickets?.length ? { tickets: pr.tickets } : {}
|
|
2936
|
+
};
|
|
2937
|
+
}
|
|
2938
|
+
function formatMcpPrList(input) {
|
|
2939
|
+
return {
|
|
2940
|
+
...input.viewer ? { viewer: input.viewer } : {},
|
|
2941
|
+
...input.queue ? { queue: input.queue } : {},
|
|
2942
|
+
state: input.state,
|
|
2943
|
+
...input.labels?.length ? { labels: input.labels } : {},
|
|
2944
|
+
...input.reviewer ? { reviewer: input.reviewer } : {},
|
|
2945
|
+
...input.query ? { query: input.query } : {},
|
|
2946
|
+
limit: input.limit,
|
|
2947
|
+
returned: input.prs.length,
|
|
2948
|
+
truncated: input.truncated,
|
|
2949
|
+
...input.truncated ? {
|
|
2950
|
+
hint: "More PRs match. Pass a higher limit (max 250) or tighten label / reviewer / query."
|
|
2951
|
+
} : {},
|
|
2952
|
+
prs: input.prs.map(compactPrRow)
|
|
2953
|
+
};
|
|
2954
|
+
}
|
|
2955
|
+
|
|
2818
2956
|
// src/mcp/schedule-tools.ts
|
|
2819
2957
|
import { z as z4 } from "zod";
|
|
2820
2958
|
function text4(payload, isError = false) {
|
|
@@ -3373,7 +3511,7 @@ async function startMcpServer() {
|
|
|
3373
3511
|
);
|
|
3374
3512
|
}
|
|
3375
3513
|
try {
|
|
3376
|
-
const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-
|
|
3514
|
+
const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-H3INSR67.js");
|
|
3377
3515
|
orch.setMaxConcurrent(maxConcurrentAgents2());
|
|
3378
3516
|
} catch {
|
|
3379
3517
|
}
|
|
@@ -3393,14 +3531,21 @@ async function startMcpServer() {
|
|
|
3393
3531
|
if (!worktreeProfile) {
|
|
3394
3532
|
server.tool(
|
|
3395
3533
|
"list_workspaces",
|
|
3396
|
-
"List registered Sideboard workspaces (repos). Each line is name, path,
|
|
3534
|
+
"List registered Sideboard workspaces (repos). Each line is name, path, github:owner/repo when resolvable, and viewer roles/notes when set \u2014 use path as repoPath for list_board/list_branches/list_prs/list_issues/create_thread. Roles and notes (Settings \u2192 Agents / Projects) say which tickets and review PRs belong to the user.",
|
|
3397
3535
|
{},
|
|
3398
3536
|
async () => {
|
|
3399
3537
|
const workspaces = orch.listWorkspaces();
|
|
3400
3538
|
const lines = await Promise.all(
|
|
3401
3539
|
workspaces.map(async (w) => {
|
|
3402
3540
|
const slug = await resolveGithubRepoSlug(w.path).catch(() => null);
|
|
3403
|
-
|
|
3541
|
+
let profile;
|
|
3542
|
+
try {
|
|
3543
|
+
profile = resolveViewerProfileForRepo(w.path);
|
|
3544
|
+
} catch {
|
|
3545
|
+
profile = resolveViewerProfile();
|
|
3546
|
+
}
|
|
3547
|
+
const suffix = formatWorkspaceProfileSuffix(profile);
|
|
3548
|
+
return slug ? `${w.name} ${w.path} github:${slug}${suffix}` : `${w.name} ${w.path}${suffix}`;
|
|
3404
3549
|
})
|
|
3405
3550
|
);
|
|
3406
3551
|
return {
|
|
@@ -3653,11 +3798,10 @@ async function startMcpServer() {
|
|
|
3653
3798
|
);
|
|
3654
3799
|
if (!worktreeProfile) {
|
|
3655
3800
|
registerSlackTools(server);
|
|
3656
|
-
|
|
3657
|
-
registerAbleTimeTools(server);
|
|
3801
|
+
registerConnectedIssueVendorTools(server);
|
|
3658
3802
|
registerScheduleTools(server);
|
|
3659
|
-
const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-
|
|
3660
|
-
const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-
|
|
3803
|
+
const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-SK2QISPE.js");
|
|
3804
|
+
const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-H3INSR67.js");
|
|
3661
3805
|
const accountDefaults = resolveThreadDefaults2();
|
|
3662
3806
|
const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
|
|
3663
3807
|
server.tool(
|
|
@@ -3700,7 +3844,7 @@ async function startMcpServer() {
|
|
|
3700
3844
|
);
|
|
3701
3845
|
server.tool(
|
|
3702
3846
|
"create_thread",
|
|
3703
|
-
`Create a worktree thread (chat) from branch, pr, or ticket.
|
|
3847
|
+
`Create a worktree thread (chat) from branch, pr, or ticket. A ticket, PR, or named branch may have only one live worktree \u2014 if one already matches, returns it (alreadyStarted=true) instead of a second checkout. Creating from the default branch still opens a new isolated worktree. Pass repoPath from list_workspaces. cowboy=true uses the project folder on the default branch (no isolated worktree; land is commit+push). From an orchestration chat, omit parentThreadId (Sideboard binds the child to this chat) or pass the exact id from the turn reminder \u2014 never invent a uuid. Prefer omitting agent/model so Sideboard applies ${accountDefaultsHint}. Setup (settings.toml, .cursor/worktrees.json, or script/setup) runs in the background in parallel with the first turn (skipped for cowboy). Then use send_to_thread to chat.`,
|
|
3704
3848
|
{
|
|
3705
3849
|
sourceType: z5.enum(["branch", "pr", "ticket"]),
|
|
3706
3850
|
sourceRef: z5.string(),
|
|
@@ -3727,7 +3871,7 @@ async function startMcpServer() {
|
|
|
3727
3871
|
);
|
|
3728
3872
|
server.tool(
|
|
3729
3873
|
"start_board_card",
|
|
3730
|
-
"Same as create_thread for a ticket, PR, or named branch (attaches issue text when Sideboard can resolve it).
|
|
3874
|
+
"Same as create_thread for a ticket, PR, or named branch (attaches issue text when Sideboard can resolve it). Does not create a second worktree when one already matches \u2014 returns that thread (alreadyStarted). Then send_to_thread.",
|
|
3731
3875
|
{
|
|
3732
3876
|
kind: z5.enum(["ticket", "pr", "branch"]),
|
|
3733
3877
|
ref: z5.string().describe("Ticket identifier (ENG-12), PR number (44), or branch name from list_board"),
|
|
@@ -4373,21 +4517,47 @@ async function startMcpServer() {
|
|
|
4373
4517
|
);
|
|
4374
4518
|
server.tool(
|
|
4375
4519
|
"list_prs",
|
|
4376
|
-
|
|
4377
|
-
{
|
|
4378
|
-
|
|
4520
|
+
'List GitHub PRs for a registered workspace (the review surface for assigned ticket work \u2014 not the tickets). Pass repoPath from list_workspaces. "Get me N tickets to review" \u2192 queue=review and limit=N: open non-draft PRs labeled eng-review with no individual user reviewer. Prefer teams that match Settings \u2192 Agents / Projects roles for this repo. A team like engineering-team is not a claim (you are on that team). Also: state (open|closed|merged|all|review), label, reviewer (me|unassigned|login), query, limit (default 40, max 250). Then create_thread with sourceType=pr.',
|
|
4521
|
+
{
|
|
4522
|
+
repoPath: z5.string(),
|
|
4523
|
+
query: z5.string().optional().describe("GitHub search tokens (title, draft:true, \u2026)"),
|
|
4524
|
+
queue: z5.enum(["review", "mine", "approved", "changes"]).optional().describe(
|
|
4525
|
+
'review = unclaimed eng-review inbox (use for "get me N tickets to review"). mine = review-requested:@me. approved / changes = eng-approved / eng-requested-changes.'
|
|
4526
|
+
),
|
|
4527
|
+
state: z5.enum(["open", "closed", "merged", "all", "review"]).optional().describe("GitHub PR state (default open). review is an alias for queue=review."),
|
|
4528
|
+
label: z5.string().optional().describe(
|
|
4529
|
+
"GitHub label / workflow tag. Comma-separated AND. Examples: eng-review, eng-approved, eng-requested-changes"
|
|
4530
|
+
),
|
|
4531
|
+
reviewer: z5.string().optional().describe(
|
|
4532
|
+
"me (review requested of you), unassigned (no individual reviewer; team queues like engineering-team still count), all, or a GitHub login"
|
|
4533
|
+
),
|
|
4534
|
+
limit: z5.number().int().positive().max(250).optional().describe("Page size (default 40, max 250). Raise when truncated is true.")
|
|
4535
|
+
},
|
|
4536
|
+
async ({ repoPath, query, queue, state, label, reviewer, limit }) => {
|
|
4379
4537
|
const root = await resolveRepoRoot(repoPath);
|
|
4380
|
-
const
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4538
|
+
const page = clampMcpIssueLimit(limit);
|
|
4539
|
+
const resolved = resolveListPrsOptions({
|
|
4540
|
+
query,
|
|
4541
|
+
queue,
|
|
4542
|
+
state,
|
|
4543
|
+
labels: label,
|
|
4544
|
+
reviewer,
|
|
4545
|
+
limit: page + 1
|
|
4546
|
+
});
|
|
4547
|
+
const prs = await listPrs(root, resolved);
|
|
4548
|
+
const windowed = applyIssueListWindow(prs, page);
|
|
4549
|
+
return mcpJson(
|
|
4550
|
+
formatMcpPrList({
|
|
4551
|
+
queue: resolved.queue,
|
|
4552
|
+
state: resolved.state,
|
|
4553
|
+
labels: resolved.labels,
|
|
4554
|
+
reviewer: resolved.reviewer,
|
|
4555
|
+
query: resolved.query,
|
|
4556
|
+
limit: page,
|
|
4557
|
+
prs: windowed.items,
|
|
4558
|
+
truncated: windowed.truncated
|
|
4559
|
+
})
|
|
4560
|
+
);
|
|
4391
4561
|
}
|
|
4392
4562
|
);
|
|
4393
4563
|
server.tool(
|
|
@@ -4512,28 +4682,27 @@ async function startMcpServer() {
|
|
|
4512
4682
|
);
|
|
4513
4683
|
server.tool(
|
|
4514
4684
|
"list_issues",
|
|
4515
|
-
"List or search issues
|
|
4685
|
+
"List or search issues (Linear, AbleTime, or GitHub; falls back to GitHub). Use Settings \u2192 Agents / Projects notes and roles to pick tickets relevant to the viewer (query + assignee=me or unassigned as the notes say). Default 40; pass query and/or limit (max 250) when truncated. assignee: me (Linear default), unassigned, all, or a user id. Then create_thread with sourceType=ticket.",
|
|
4516
4686
|
{
|
|
4517
4687
|
repoPath: z5.string(),
|
|
4518
4688
|
query: z5.string().optional().describe("Search title, identifier, or description"),
|
|
4519
|
-
assignee: z5.string().optional().describe("me (Linear default), unassigned, all, a user id, or a GitHub login")
|
|
4689
|
+
assignee: z5.string().optional().describe("me (Linear default), unassigned, all, a user id, or a GitHub login"),
|
|
4690
|
+
limit: z5.number().int().positive().max(250).optional().describe("Page size (default 40, max 250). Raise when truncated is true.")
|
|
4520
4691
|
},
|
|
4521
|
-
async ({ repoPath, query, assignee }) => {
|
|
4692
|
+
async ({ repoPath, query, assignee, limit }) => {
|
|
4522
4693
|
const root = await resolveRepoRoot(repoPath);
|
|
4523
|
-
const
|
|
4524
|
-
|
|
4525
|
-
|
|
4526
|
-
|
|
4527
|
-
|
|
4528
|
-
|
|
4529
|
-
|
|
4530
|
-
|
|
4531
|
-
|
|
4532
|
-
|
|
4533
|
-
|
|
4534
|
-
|
|
4535
|
-
const issues = await listLinearIssues(agent, repoPath);
|
|
4536
|
-
return { content: [{ type: "text", text: JSON.stringify(issues, null, 2) }] };
|
|
4694
|
+
const page = clampMcpIssueLimit(limit);
|
|
4695
|
+
const result = await listIssues(root, { query, assignee, limit: page + 1 });
|
|
4696
|
+
const windowed = applyIssueListWindow(result.issues, page);
|
|
4697
|
+
return mcpJson(
|
|
4698
|
+
formatMcpIssueList({
|
|
4699
|
+
source: result.source,
|
|
4700
|
+
viewer: result.viewer?.name || result.viewer?.login,
|
|
4701
|
+
limit: page,
|
|
4702
|
+
issues: windowed.items,
|
|
4703
|
+
truncated: windowed.truncated
|
|
4704
|
+
})
|
|
4705
|
+
);
|
|
4537
4706
|
}
|
|
4538
4707
|
);
|
|
4539
4708
|
}
|
|
@@ -6816,6 +6985,10 @@ async function startSlackRelayServer(opts) {
|
|
|
6816
6985
|
}
|
|
6817
6986
|
export {
|
|
6818
6987
|
ABLETIME_MCP_PATH,
|
|
6988
|
+
ACCOUNT_ROLES,
|
|
6989
|
+
ACCOUNT_ROLE_LABELS,
|
|
6990
|
+
ACCOUNT_ROLE_MAX,
|
|
6991
|
+
ACCOUNT_ROLE_PRESETS,
|
|
6819
6992
|
AGENT_GIT_ACTIONS,
|
|
6820
6993
|
AGENT_RUNNER_MAX_OLD_SPACE_MB,
|
|
6821
6994
|
ATTACHMENTS_DIR,
|
|
@@ -6872,6 +7045,7 @@ export {
|
|
|
6872
7045
|
PLAN_FILE_REL,
|
|
6873
7046
|
PLAN_MODE_INSTRUCTION,
|
|
6874
7047
|
PLAN_QUESTION_ANSWERS_PREFIX,
|
|
7048
|
+
PROFILE_NOTES_MAX,
|
|
6875
7049
|
REPO_REVIEW_NAME,
|
|
6876
7050
|
REPO_REVIEW_PATH,
|
|
6877
7051
|
REVIEW_REQUEST_NAME,
|
|
@@ -6898,6 +7072,7 @@ export {
|
|
|
6898
7072
|
WORKTREE_MCP_TOOLS,
|
|
6899
7073
|
abletimeMcpRequest,
|
|
6900
7074
|
abletimeMcpUrl,
|
|
7075
|
+
accountRoleLabel,
|
|
6901
7076
|
ackSlackInboundSeen,
|
|
6902
7077
|
addBoardPin,
|
|
6903
7078
|
addPrStackLayer,
|
|
@@ -7032,6 +7207,7 @@ export {
|
|
|
7032
7207
|
discoverSkills,
|
|
7033
7208
|
dropCachedPrefixOnResume,
|
|
7034
7209
|
emptyPublicIntegrations,
|
|
7210
|
+
emptySetupLog,
|
|
7035
7211
|
encodeBrightsyTarget,
|
|
7036
7212
|
enrichPathWithNpmGlobalBin,
|
|
7037
7213
|
enrichWorkspacesWithGithub,
|
|
@@ -7065,7 +7241,9 @@ export {
|
|
|
7065
7241
|
findInvalidCacheControlTtlOrder,
|
|
7066
7242
|
findLastBrightsyContextSummary,
|
|
7067
7243
|
findLiveThreadForCreate,
|
|
7244
|
+
findLiveThreadForCreateSource,
|
|
7068
7245
|
findOrphanWorktrees,
|
|
7246
|
+
findProjectProfileKey,
|
|
7069
7247
|
findSlackCoordinator,
|
|
7070
7248
|
findThreadByRef,
|
|
7071
7249
|
findThreadForStackLayer,
|
|
@@ -7076,6 +7254,7 @@ export {
|
|
|
7076
7254
|
forkChatTab,
|
|
7077
7255
|
forkMessageSlice,
|
|
7078
7256
|
forkThreadWorktree,
|
|
7257
|
+
formatAccountProfilePlaybookLine,
|
|
7079
7258
|
formatAgentInstructions,
|
|
7080
7259
|
formatArtifactDirective,
|
|
7081
7260
|
formatBrightsyFetchError,
|
|
@@ -7094,6 +7273,7 @@ export {
|
|
|
7094
7273
|
formatPlanQuestionsForChat,
|
|
7095
7274
|
formatPrGateDirective,
|
|
7096
7275
|
formatProcessGuideDirective,
|
|
7276
|
+
formatProjectProfilePlaybookLines,
|
|
7097
7277
|
formatRateLimitResetHint,
|
|
7098
7278
|
formatRenameBranchDirective,
|
|
7099
7279
|
formatScheduleWhen,
|
|
@@ -7107,6 +7287,7 @@ export {
|
|
|
7107
7287
|
formatTranscriptMarkdown,
|
|
7108
7288
|
formatUiReminder,
|
|
7109
7289
|
formatWorkspaceInventory,
|
|
7290
|
+
formatWorkspaceProfileSuffix,
|
|
7110
7291
|
formatWorktreeDirective,
|
|
7111
7292
|
formatWorktreeReminder,
|
|
7112
7293
|
forwardContextUsage,
|
|
@@ -7285,6 +7466,7 @@ export {
|
|
|
7285
7466
|
mergeAgentGitAuthEnv,
|
|
7286
7467
|
mergePr,
|
|
7287
7468
|
mergePrStack,
|
|
7469
|
+
mergeSetupOutput,
|
|
7288
7470
|
mergeSideboardIntoMcpServersJson,
|
|
7289
7471
|
mergeUsage,
|
|
7290
7472
|
messagePartParentId,
|
|
@@ -7333,6 +7515,7 @@ export {
|
|
|
7333
7515
|
planQuestionsSignature,
|
|
7334
7516
|
pollSlackOutboundWatches,
|
|
7335
7517
|
posixShellSingleQuote,
|
|
7518
|
+
preferTeamsForRole,
|
|
7336
7519
|
preferredCursorCostCents,
|
|
7337
7520
|
prepareTerminalCommand,
|
|
7338
7521
|
previewLand,
|
|
@@ -7341,6 +7524,7 @@ export {
|
|
|
7341
7524
|
readExistingReviewRequestFile,
|
|
7342
7525
|
readKeychainVaultKey,
|
|
7343
7526
|
readPlanFile,
|
|
7527
|
+
readSetupLog,
|
|
7344
7528
|
readSkillBody,
|
|
7345
7529
|
readThread,
|
|
7346
7530
|
readWorktreeFile,
|
|
@@ -7362,6 +7546,8 @@ export {
|
|
|
7362
7546
|
requireAgent,
|
|
7363
7547
|
resetGhStackDetectCache,
|
|
7364
7548
|
resetGithubAgentTokenMemo,
|
|
7549
|
+
resolveAccountProfile,
|
|
7550
|
+
resolveAccountProfileFromSettings,
|
|
7365
7551
|
resolveAgentExecutable,
|
|
7366
7552
|
resolveAgentGitAuthEnv,
|
|
7367
7553
|
resolveClaudeExecutable,
|
|
@@ -7393,7 +7579,10 @@ export {
|
|
|
7393
7579
|
resolveThreadDefaults,
|
|
7394
7580
|
resolveThreadEffort,
|
|
7395
7581
|
resolveVaultKey,
|
|
7582
|
+
resolveViewerProfile,
|
|
7583
|
+
resolveViewerProfileForRepo,
|
|
7396
7584
|
resolveWorktreeStartPoint,
|
|
7585
|
+
reviewTeamHintsForRoles,
|
|
7397
7586
|
rewriteAbleTimeError,
|
|
7398
7587
|
rewriteLinearError,
|
|
7399
7588
|
run,
|
|
@@ -7493,6 +7682,7 @@ export {
|
|
|
7493
7682
|
updateIntegrationsSettings,
|
|
7494
7683
|
updateLinearIssue,
|
|
7495
7684
|
updateOpencodeSettings,
|
|
7685
|
+
updateProjectProfileSettings,
|
|
7496
7686
|
updateSchedule,
|
|
7497
7687
|
updateThread,
|
|
7498
7688
|
userClaudeMcpConfigPath,
|