@sideboard-ai/core 0.1.152 → 0.1.155
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-4XNSGDXE.js → chunk-3BWVOUQG.js} +244 -1
- package/dist/{chunk-7BQNSUR2.js → chunk-46ZTBUVJ.js} +364 -200
- 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-6X7Z34XE.js → chunk-J2OKVOBM.js} +410 -188
- package/dist/{chunk-WLV7TRMR.js → chunk-JOK4XWBG.js} +1 -1
- package/dist/{chunk-BD2ICC4D.js → chunk-JTJHOYCU.js} +1 -1
- 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 +1889 -777
- package/dist/index.d.cts +222 -12
- package/dist/index.d.ts +222 -12
- package/dist/index.js +304 -108
- package/dist/mcp/run-stdio.cjs +1747 -1240
- package/dist/mcp/run-stdio.js +232 -80
- package/dist/{orchestrator-256DFPSX.js → orchestrator-3FWEKDAQ.js} +9 -11
- package/dist/{orchestrator-NUA6SEV7.js → orchestrator-HC7XVGJB.js} +10 -12
- 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,
|
|
@@ -137,7 +139,9 @@ import {
|
|
|
137
139
|
isOptionalServiceId,
|
|
138
140
|
isPidAlive,
|
|
139
141
|
isPrimaryCheckoutThread,
|
|
142
|
+
isSetupLastError,
|
|
140
143
|
isSlackExternalReplyPrompt,
|
|
144
|
+
isStaleLastErrorDuringTurn,
|
|
141
145
|
isThisProcessDesktopHost,
|
|
142
146
|
issueNeedsWorkspacePick,
|
|
143
147
|
lastRequestOccupancy,
|
|
@@ -152,6 +156,7 @@ import {
|
|
|
152
156
|
listWorktreeFiles,
|
|
153
157
|
loadAgentInstructions,
|
|
154
158
|
maybeCompactContext,
|
|
159
|
+
mergeSetupOutput,
|
|
155
160
|
messagesSinceLastBrightsyContextSummary,
|
|
156
161
|
normalizeServiceOrigin,
|
|
157
162
|
openPrStackLayers,
|
|
@@ -164,6 +169,7 @@ import {
|
|
|
164
169
|
pollSlackOutboundWatches,
|
|
165
170
|
previewLand,
|
|
166
171
|
readExistingReviewRequestFile,
|
|
172
|
+
readSetupLog,
|
|
167
173
|
readSkillBody,
|
|
168
174
|
readTurnLive,
|
|
169
175
|
readWorktreeFile,
|
|
@@ -192,6 +198,7 @@ import {
|
|
|
192
198
|
shouldRemoveWorktreeOnTeardown,
|
|
193
199
|
shouldResetSessionForOccupancy,
|
|
194
200
|
shouldRunWorktreeCleanup,
|
|
201
|
+
shouldStampSetupLastError,
|
|
195
202
|
slackApi,
|
|
196
203
|
slackArchiveUrl,
|
|
197
204
|
slackTokenFor,
|
|
@@ -216,7 +223,7 @@ import {
|
|
|
216
223
|
worktreeCleanupSettings,
|
|
217
224
|
wrapReviewSkillMarkdown,
|
|
218
225
|
writeWorktreeFile
|
|
219
|
-
} from "./chunk-
|
|
226
|
+
} from "./chunk-J2OKVOBM.js";
|
|
220
227
|
import {
|
|
221
228
|
LEGACY_PLAN_FILE_REL,
|
|
222
229
|
PLAN_FILE_NAME,
|
|
@@ -310,49 +317,33 @@ import {
|
|
|
310
317
|
withEventParentId,
|
|
311
318
|
withEventsParentId,
|
|
312
319
|
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";
|
|
320
|
+
} from "./chunk-QZEZXYVV.js";
|
|
339
321
|
import {
|
|
340
322
|
CLOUD_COORDINATOR_BUSY_REPLY,
|
|
341
323
|
CLOUD_COORDINATOR_STOPPED_REPLY,
|
|
342
324
|
CLOUD_COORDINATOR_TIMEOUT_REPLY,
|
|
343
325
|
CLOUD_ORCHESTRATOR_GOAL,
|
|
326
|
+
COORDINATOR_TOOL_PLAYBOOK,
|
|
344
327
|
GLOBAL_WORKSPACE_ID,
|
|
345
328
|
ORCHESTRATOR_AGENT_KINDS,
|
|
346
329
|
SIDEBOARD_FORCE_STOP,
|
|
330
|
+
SLACK_REPLY_FORMATTING,
|
|
331
|
+
addWorkspace,
|
|
347
332
|
assertOrchestratorCapableAgent,
|
|
348
333
|
attachmentFromAbsolutePath,
|
|
349
334
|
attachmentsFromBuffers,
|
|
350
335
|
attachmentsFromWorktreePaths,
|
|
351
336
|
coerceOrchestratorAgent,
|
|
337
|
+
coordinatorSystemPrompt,
|
|
338
|
+
coordinatorTurnReminder,
|
|
352
339
|
createGlobalChat,
|
|
340
|
+
enrichWorkspacesWithGithub,
|
|
353
341
|
ensureCloudCoordinator,
|
|
342
|
+
ensureGlobalCoordinatorCwd,
|
|
354
343
|
ensureSlackCoordinator,
|
|
344
|
+
ensureWorkspace,
|
|
355
345
|
findSlackCoordinator,
|
|
346
|
+
formatWorkspaceInventory,
|
|
356
347
|
healOrchestrationSoccerTitles,
|
|
357
348
|
isCloudCoordinatorThread,
|
|
358
349
|
isGlobalRepoPath,
|
|
@@ -362,24 +353,18 @@ import {
|
|
|
362
353
|
isOrchestratorThread,
|
|
363
354
|
isSlackCoordinatorThread,
|
|
364
355
|
listGlobalThreads,
|
|
356
|
+
listWorkspaces,
|
|
365
357
|
orchestrationTitleNeedsSoccerNickname,
|
|
366
358
|
orchestratorSessionPoisonedByBuiltins,
|
|
367
359
|
parseForceStopMessage,
|
|
368
360
|
persistPendingFileAttachments,
|
|
361
|
+
removeWorkspace,
|
|
369
362
|
slackCoordinatorSourceRef,
|
|
370
363
|
stageAbsolutePathsAsAttachments,
|
|
371
364
|
stageBuffersAsAttachments,
|
|
365
|
+
syncWorkspacesFromThreads,
|
|
372
366
|
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";
|
|
367
|
+
} from "./chunk-2F63IMCL.js";
|
|
383
368
|
import {
|
|
384
369
|
FAMOUS_SOCCER_TEAMS,
|
|
385
370
|
GITHUB_PR_BODY_MAX_CHARS,
|
|
@@ -457,6 +442,7 @@ import {
|
|
|
457
442
|
resolveDiffBaseRef,
|
|
458
443
|
resolveGithubAgentToken,
|
|
459
444
|
resolveGithubRepoSlug,
|
|
445
|
+
resolveListPrsOptions,
|
|
460
446
|
resolvePrSelector,
|
|
461
447
|
resolvePrSelectors,
|
|
462
448
|
resolveRepoRoot,
|
|
@@ -471,7 +457,7 @@ import {
|
|
|
471
457
|
worktreeDisplayLabel,
|
|
472
458
|
worktreeDisplayLabelForGroup,
|
|
473
459
|
worktreeNameFromPath
|
|
474
|
-
} from "./chunk-
|
|
460
|
+
} from "./chunk-LQMFCS54.js";
|
|
475
461
|
import {
|
|
476
462
|
ATTACHMENTS_DIR,
|
|
477
463
|
DETACHED_JOBS_DIR,
|
|
@@ -480,6 +466,24 @@ import {
|
|
|
480
466
|
attachmentsGitignoreBody,
|
|
481
467
|
isWorkspaceScratchPath
|
|
482
468
|
} from "./chunk-JRH62XC4.js";
|
|
469
|
+
import {
|
|
470
|
+
brightsyMcpServerName,
|
|
471
|
+
connectBrightsyTeam,
|
|
472
|
+
disconnectBrightsyTeam,
|
|
473
|
+
ensureConnectedBrightsyTeamTokens,
|
|
474
|
+
getBrightsySession,
|
|
475
|
+
listBrightsyAccounts,
|
|
476
|
+
listConnectedBrightsyTeams,
|
|
477
|
+
switchBrightsyAccount
|
|
478
|
+
} from "./chunk-XD2BAANL.js";
|
|
479
|
+
import {
|
|
480
|
+
brightsyAccessTokenNeedsRefresh,
|
|
481
|
+
brightsyConfigPath,
|
|
482
|
+
ensureBrightsyLocalConfigFresh,
|
|
483
|
+
loadBrightsyConfig,
|
|
484
|
+
refreshBrightsyAccessToken,
|
|
485
|
+
saveBrightsyConfig
|
|
486
|
+
} from "./chunk-M267JPEA.js";
|
|
483
487
|
import {
|
|
484
488
|
ABLETIME_MCP_PATH,
|
|
485
489
|
DEFAULT_ABLETIME_HOST,
|
|
@@ -501,7 +505,7 @@ import {
|
|
|
501
505
|
taskUrl,
|
|
502
506
|
toAbleTimeIssueInfo,
|
|
503
507
|
verifyAbleTimeConnection
|
|
504
|
-
} from "./chunk-
|
|
508
|
+
} from "./chunk-JOK4XWBG.js";
|
|
505
509
|
import {
|
|
506
510
|
formatFetchError,
|
|
507
511
|
httpFetch,
|
|
@@ -518,10 +522,16 @@ import {
|
|
|
518
522
|
withMaxOldSpaceSize
|
|
519
523
|
} from "./chunk-HEII7W3Q.js";
|
|
520
524
|
import {
|
|
525
|
+
ACCOUNT_ROLES,
|
|
526
|
+
ACCOUNT_ROLE_LABELS,
|
|
527
|
+
ACCOUNT_ROLE_MAX,
|
|
528
|
+
ACCOUNT_ROLE_PRESETS,
|
|
521
529
|
FOLLOW_UP_BEHAVIORS,
|
|
522
530
|
GITHUB_GIT_AUTH_MODES,
|
|
523
531
|
HARNESS_ENV_KEYS,
|
|
524
532
|
ISSUE_SOURCE_LABELS,
|
|
533
|
+
PROFILE_NOTES_MAX,
|
|
534
|
+
accountRoleLabel,
|
|
525
535
|
appSettingsPath,
|
|
526
536
|
applyAppEnvironment,
|
|
527
537
|
autoArchiveOnMergeEnabled,
|
|
@@ -544,7 +554,11 @@ import {
|
|
|
544
554
|
disconnectLinearConnection,
|
|
545
555
|
emptyPublicIntegrations,
|
|
546
556
|
ensureSlackDeviceIdentity,
|
|
557
|
+
findProjectProfileKey,
|
|
547
558
|
followUpBehavior,
|
|
559
|
+
formatAccountProfilePlaybookLine,
|
|
560
|
+
formatProjectProfilePlaybookLines,
|
|
561
|
+
formatWorkspaceProfileSuffix,
|
|
548
562
|
getAbleTimeAccessToken,
|
|
549
563
|
getAbleTimeHost,
|
|
550
564
|
getDefaultAgent,
|
|
@@ -565,13 +579,19 @@ import {
|
|
|
565
579
|
orchestrationQuotaFallbackAgent,
|
|
566
580
|
orchestrationQuotaOnLimit,
|
|
567
581
|
persistVaultKeyInKeychain,
|
|
582
|
+
preferTeamsForRole,
|
|
568
583
|
readKeychainVaultKey,
|
|
584
|
+
resolveAccountProfile,
|
|
585
|
+
resolveAccountProfileFromSettings,
|
|
569
586
|
resolveAgentExecutable,
|
|
570
587
|
resolveClaudeExecutable,
|
|
571
588
|
resolveEffectiveIssueSource,
|
|
572
589
|
resolveNewThreadOptions,
|
|
573
590
|
resolveThreadDefaults,
|
|
574
591
|
resolveVaultKey,
|
|
592
|
+
resolveViewerProfile,
|
|
593
|
+
resolveViewerProfileForRepo,
|
|
594
|
+
reviewTeamHintsForRoles,
|
|
575
595
|
saveAbleTimeConnection,
|
|
576
596
|
saveAppSettings,
|
|
577
597
|
saveLinearOAuth,
|
|
@@ -589,8 +609,9 @@ import {
|
|
|
589
609
|
updateCodexSettings,
|
|
590
610
|
updateDefaultsSettings,
|
|
591
611
|
updateIntegrationsSettings,
|
|
592
|
-
updateOpencodeSettings
|
|
593
|
-
|
|
612
|
+
updateOpencodeSettings,
|
|
613
|
+
updateProjectProfileSettings
|
|
614
|
+
} from "./chunk-3BWVOUQG.js";
|
|
594
615
|
import {
|
|
595
616
|
stripNestedElectronEnv
|
|
596
617
|
} from "./chunk-4TR3HZFT.js";
|
|
@@ -600,7 +621,7 @@ import {
|
|
|
600
621
|
isThreadCaffeinated,
|
|
601
622
|
releaseCaffeinateHoldForThread,
|
|
602
623
|
setCaffeinateHold
|
|
603
|
-
} from "./chunk-
|
|
624
|
+
} from "./chunk-AO35MGOE.js";
|
|
604
625
|
import "./chunk-JT7R45JB.js";
|
|
605
626
|
import {
|
|
606
627
|
appendMessage,
|
|
@@ -617,7 +638,7 @@ import {
|
|
|
617
638
|
updateThread,
|
|
618
639
|
withThreadLock,
|
|
619
640
|
writeThread
|
|
620
|
-
} from "./chunk-
|
|
641
|
+
} from "./chunk-7UURXPKD.js";
|
|
621
642
|
import {
|
|
622
643
|
THINKING_EFFORTS,
|
|
623
644
|
isThinkingEffort,
|
|
@@ -653,7 +674,7 @@ import {
|
|
|
653
674
|
threadsDir,
|
|
654
675
|
workspaceSettingsSourceLabel,
|
|
655
676
|
worktreesRoot
|
|
656
|
-
} from "./chunk-
|
|
677
|
+
} from "./chunk-EFVFB2AH.js";
|
|
657
678
|
import "./chunk-QQKDGPUI.js";
|
|
658
679
|
import {
|
|
659
680
|
conductorBundledBinDir,
|
|
@@ -1021,7 +1042,7 @@ var ISSUE_FIELDS = `
|
|
|
1021
1042
|
state { id name type }
|
|
1022
1043
|
assignee { id name }
|
|
1023
1044
|
creator { id name }
|
|
1024
|
-
team { id key name
|
|
1045
|
+
team { id key name }
|
|
1025
1046
|
labels(first: 50) { nodes { name } }
|
|
1026
1047
|
cycle { name number startsAt endsAt completedAt }
|
|
1027
1048
|
project { id name }
|
|
@@ -1502,7 +1523,9 @@ async function updateLinearIssue(input, opts) {
|
|
|
1502
1523
|
}
|
|
1503
1524
|
if (input.state?.trim()) {
|
|
1504
1525
|
const existing = await getLinearIssue(issueId, opts);
|
|
1505
|
-
const
|
|
1526
|
+
const { teams } = await listLinearTeams(opts);
|
|
1527
|
+
const teamRef = existing.team?.key || existing.team?.id;
|
|
1528
|
+
const team = teamRef ? resolveLinearTeam(teams, teamRef) : void 0;
|
|
1506
1529
|
if (!team?.states.length) {
|
|
1507
1530
|
throw new Error(`Linear issue ${existing.identifier} has no workflow states to resolve "${input.state}"`);
|
|
1508
1531
|
}
|
|
@@ -1559,6 +1582,11 @@ async function validateLinearApiKey(apiKey) {
|
|
|
1559
1582
|
function assigneeKey(assignee) {
|
|
1560
1583
|
return (assignee ?? "").trim().toLowerCase();
|
|
1561
1584
|
}
|
|
1585
|
+
function takeIssuePage(issues, limit) {
|
|
1586
|
+
if (limit == null) return issues;
|
|
1587
|
+
const n = Math.max(1, Math.min(1e3, Math.floor(limit)));
|
|
1588
|
+
return issues.slice(0, n);
|
|
1589
|
+
}
|
|
1562
1590
|
function issueMatchesAssignee(issue, assignee, viewerName = "") {
|
|
1563
1591
|
const key = assigneeKey(assignee);
|
|
1564
1592
|
if (!key || key === "all" || key === "*") return true;
|
|
@@ -1660,13 +1688,33 @@ async function listIssues(repoPath, opts) {
|
|
|
1660
1688
|
};
|
|
1661
1689
|
}
|
|
1662
1690
|
if (source === "abletime") {
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1691
|
+
if (query) {
|
|
1692
|
+
const [searched, orientation] = await Promise.all([
|
|
1693
|
+
searchAbleTimeTasks(query),
|
|
1694
|
+
getAbleTimeOrientation().catch(() => null)
|
|
1695
|
+
]);
|
|
1696
|
+
const viewerName2 = orientation?.viewer.name ?? orientation?.viewer.id ?? "";
|
|
1697
|
+
const issues3 = takeIssuePage(
|
|
1698
|
+
searched.map(toAbleTimeIssueInfo).filter((issue) => issueMatchesAssignee(issue, assignee, viewerName2)),
|
|
1699
|
+
opts?.limit
|
|
1700
|
+
);
|
|
1701
|
+
return {
|
|
1702
|
+
source,
|
|
1703
|
+
preferredSource,
|
|
1704
|
+
linearConnected,
|
|
1705
|
+
abletimeConnected,
|
|
1706
|
+
issues: issues3,
|
|
1707
|
+
viewer: {
|
|
1708
|
+
login: orientation?.viewer.name,
|
|
1709
|
+
name: orientation?.viewer.name
|
|
1710
|
+
}
|
|
1711
|
+
};
|
|
1712
|
+
}
|
|
1713
|
+
const listed = await listAbleTimeAssignedIssues();
|
|
1667
1714
|
const viewerName = listed.viewer.name ?? listed.viewer.id ?? "";
|
|
1668
|
-
const issues2 = (
|
|
1669
|
-
(issue) => issueMatchesAssignee(issue, assignee, viewerName)
|
|
1715
|
+
const issues2 = takeIssuePage(
|
|
1716
|
+
listed.issues.filter((issue) => issueMatchesAssignee(issue, assignee, viewerName)),
|
|
1717
|
+
opts?.limit
|
|
1670
1718
|
);
|
|
1671
1719
|
return {
|
|
1672
1720
|
source,
|
|
@@ -2586,12 +2634,53 @@ function registerSlackTools(server) {
|
|
|
2586
2634
|
|
|
2587
2635
|
// src/mcp/abletime-tools.ts
|
|
2588
2636
|
import { z as z2 } from "zod";
|
|
2589
|
-
|
|
2637
|
+
|
|
2638
|
+
// src/mcp/issue-list.ts
|
|
2639
|
+
var MCP_ISSUE_LIST_DEFAULT_LIMIT = 40;
|
|
2640
|
+
var MCP_ISSUE_LIST_MAX_LIMIT = 250;
|
|
2641
|
+
function clampMcpIssueLimit(limit) {
|
|
2642
|
+
if (limit == null || !Number.isFinite(limit)) return MCP_ISSUE_LIST_DEFAULT_LIMIT;
|
|
2643
|
+
return Math.max(1, Math.min(MCP_ISSUE_LIST_MAX_LIMIT, Math.floor(limit)));
|
|
2644
|
+
}
|
|
2645
|
+
function applyIssueListWindow(items, limit) {
|
|
2646
|
+
const truncated = items.length > limit;
|
|
2590
2647
|
return {
|
|
2591
|
-
|
|
2648
|
+
items: truncated ? items.slice(0, limit) : items,
|
|
2649
|
+
truncated
|
|
2650
|
+
};
|
|
2651
|
+
}
|
|
2652
|
+
function compactIssueRow(issue) {
|
|
2653
|
+
return {
|
|
2654
|
+
identifier: issue.identifier,
|
|
2655
|
+
title: issue.title,
|
|
2656
|
+
...issue.assignee ? { assignee: issue.assignee } : {},
|
|
2657
|
+
...issue.labels.length > 0 ? { labels: issue.labels } : {},
|
|
2658
|
+
...issue.teamKey ? { team: issue.teamKey } : {},
|
|
2659
|
+
...issue.cycle?.name ? { cycle: issue.cycle.name } : {}
|
|
2660
|
+
};
|
|
2661
|
+
}
|
|
2662
|
+
function formatMcpIssueList(input) {
|
|
2663
|
+
return {
|
|
2664
|
+
...input.source ? { source: input.source } : {},
|
|
2665
|
+
...input.viewer ? { viewer: input.viewer } : {},
|
|
2666
|
+
limit: input.limit,
|
|
2667
|
+
returned: input.issues.length,
|
|
2668
|
+
truncated: input.truncated,
|
|
2669
|
+
...input.truncated ? { hint: "More issues match. Pass a higher limit (max 250) or a tighter query." } : {},
|
|
2670
|
+
issues: input.issues.map(compactIssueRow)
|
|
2671
|
+
};
|
|
2672
|
+
}
|
|
2673
|
+
function mcpJson(payload, isError = false) {
|
|
2674
|
+
return {
|
|
2675
|
+
content: [{ type: "text", text: JSON.stringify(payload) }],
|
|
2592
2676
|
...isError ? { isError: true } : {}
|
|
2593
2677
|
};
|
|
2594
2678
|
}
|
|
2679
|
+
|
|
2680
|
+
// src/mcp/abletime-tools.ts
|
|
2681
|
+
function text2(payload, isError = false) {
|
|
2682
|
+
return mcpJson(payload, isError);
|
|
2683
|
+
}
|
|
2595
2684
|
function fail2(err) {
|
|
2596
2685
|
return text2(
|
|
2597
2686
|
{ error: err instanceof Error ? err.message : String(err) },
|
|
@@ -2601,7 +2690,7 @@ function fail2(err) {
|
|
|
2601
2690
|
function registerAbleTimeTools(server) {
|
|
2602
2691
|
server.tool(
|
|
2603
2692
|
"abletime_orientation",
|
|
2604
|
-
"Call first when using AbleTime. Returns
|
|
2693
|
+
"Call first when using AbleTime. Returns viewer, active tasks, and projects.",
|
|
2605
2694
|
{},
|
|
2606
2695
|
async () => {
|
|
2607
2696
|
try {
|
|
@@ -2618,7 +2707,7 @@ function registerAbleTimeTools(server) {
|
|
|
2618
2707
|
);
|
|
2619
2708
|
server.tool(
|
|
2620
2709
|
"abletime_list_projects",
|
|
2621
|
-
"List AbleTime projects (and categories)
|
|
2710
|
+
"List AbleTime projects (and categories). Use a project id on create/ensure.",
|
|
2622
2711
|
{},
|
|
2623
2712
|
async () => {
|
|
2624
2713
|
try {
|
|
@@ -2686,7 +2775,7 @@ function registerAbleTimeTools(server) {
|
|
|
2686
2775
|
);
|
|
2687
2776
|
server.tool(
|
|
2688
2777
|
"abletime_ensure_task",
|
|
2689
|
-
"Find an
|
|
2778
|
+
"Find or create an AbleTime task for this work, then create_thread with sourceType=ticket.",
|
|
2690
2779
|
{
|
|
2691
2780
|
title: z2.string(),
|
|
2692
2781
|
description: z2.string().optional(),
|
|
@@ -2707,10 +2796,7 @@ function registerAbleTimeTools(server) {
|
|
|
2707
2796
|
// src/mcp/linear-tools.ts
|
|
2708
2797
|
import { z as z3 } from "zod";
|
|
2709
2798
|
function text3(payload, isError = false) {
|
|
2710
|
-
return
|
|
2711
|
-
content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
|
|
2712
|
-
...isError ? { isError: true } : {}
|
|
2713
|
-
};
|
|
2799
|
+
return mcpJson(payload, isError);
|
|
2714
2800
|
}
|
|
2715
2801
|
function fail3(err) {
|
|
2716
2802
|
return text3(
|
|
@@ -2722,7 +2808,7 @@ var prioritySchema = z3.number().int().min(0).max(4).optional().describe("0 none
|
|
|
2722
2808
|
function registerLinearTools(server) {
|
|
2723
2809
|
server.tool(
|
|
2724
2810
|
"linear_list_teams",
|
|
2725
|
-
"List Linear teams (id, key, name) and workflow states
|
|
2811
|
+
"List Linear teams (id, key, name) and workflow states. Use team key on create; state name or type on create/update.",
|
|
2726
2812
|
{},
|
|
2727
2813
|
async () => {
|
|
2728
2814
|
try {
|
|
@@ -2734,15 +2820,30 @@ function registerLinearTools(server) {
|
|
|
2734
2820
|
);
|
|
2735
2821
|
server.tool(
|
|
2736
2822
|
"linear_search_issues",
|
|
2737
|
-
"Search or list open Linear issues.
|
|
2823
|
+
"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
2824
|
{
|
|
2739
2825
|
query: z3.string().optional().describe("Search text (identifier, title, description). Omit to list by assignee only."),
|
|
2740
2826
|
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()
|
|
2827
|
+
limit: z3.number().int().positive().max(250).optional().describe("Page size (default 40, max 250). Raise when truncated is true.")
|
|
2742
2828
|
},
|
|
2743
2829
|
async ({ query, assignee, limit }) => {
|
|
2744
2830
|
try {
|
|
2745
|
-
|
|
2831
|
+
const page = clampMcpIssueLimit(limit);
|
|
2832
|
+
const listed = await listLinearIssuesFiltered({
|
|
2833
|
+
query,
|
|
2834
|
+
assignee,
|
|
2835
|
+
limit: page + 1
|
|
2836
|
+
});
|
|
2837
|
+
const windowed = applyIssueListWindow(listed.issues, page);
|
|
2838
|
+
return mcpJson(
|
|
2839
|
+
formatMcpIssueList({
|
|
2840
|
+
source: "linear",
|
|
2841
|
+
viewer: listed.viewer.name,
|
|
2842
|
+
limit: page,
|
|
2843
|
+
issues: windowed.items,
|
|
2844
|
+
truncated: windowed.truncated
|
|
2845
|
+
})
|
|
2846
|
+
);
|
|
2746
2847
|
} catch (err) {
|
|
2747
2848
|
return fail3(err);
|
|
2748
2849
|
}
|
|
@@ -2750,7 +2851,7 @@ function registerLinearTools(server) {
|
|
|
2750
2851
|
);
|
|
2751
2852
|
server.tool(
|
|
2752
2853
|
"linear_get_issue",
|
|
2753
|
-
"Get a Linear issue by uuid or identifier (ENG-123)
|
|
2854
|
+
"Get a Linear issue by uuid or identifier (ENG-123): description, comments, relations, parent/children.",
|
|
2754
2855
|
{ id: z3.string() },
|
|
2755
2856
|
async ({ id }) => {
|
|
2756
2857
|
try {
|
|
@@ -2762,7 +2863,7 @@ function registerLinearTools(server) {
|
|
|
2762
2863
|
);
|
|
2763
2864
|
server.tool(
|
|
2764
2865
|
"linear_create_issue",
|
|
2765
|
-
'Create a Linear issue. Call linear_list_teams first. team is id
|
|
2866
|
+
'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
2867
|
{
|
|
2767
2868
|
team: z3.string(),
|
|
2768
2869
|
title: z3.string(),
|
|
@@ -2781,7 +2882,7 @@ function registerLinearTools(server) {
|
|
|
2781
2882
|
);
|
|
2782
2883
|
server.tool(
|
|
2783
2884
|
"linear_update_issue",
|
|
2784
|
-
|
|
2885
|
+
"Update a Linear issue (uuid or ENG-123). Pass title, description, state, assignee, and/or priority.",
|
|
2785
2886
|
{
|
|
2786
2887
|
id: z3.string(),
|
|
2787
2888
|
title: z3.string().optional(),
|
|
@@ -2815,6 +2916,46 @@ function registerLinearTools(server) {
|
|
|
2815
2916
|
);
|
|
2816
2917
|
}
|
|
2817
2918
|
|
|
2919
|
+
// src/mcp/issue-vendor-tools.ts
|
|
2920
|
+
function registerConnectedIssueVendorTools(server, settings = loadAppSettings()) {
|
|
2921
|
+
if (isLinearConnected(settings)) registerLinearTools(server);
|
|
2922
|
+
if (isAbleTimeConnected(settings)) registerAbleTimeTools(server);
|
|
2923
|
+
}
|
|
2924
|
+
|
|
2925
|
+
// src/mcp/pr-list.ts
|
|
2926
|
+
function compactPrRow(pr) {
|
|
2927
|
+
return {
|
|
2928
|
+
number: pr.number,
|
|
2929
|
+
title: pr.title,
|
|
2930
|
+
...pr.headRefName ? { head: pr.headRefName } : {},
|
|
2931
|
+
...pr.author?.login ? { author: pr.author.login } : {},
|
|
2932
|
+
...pr.state ? { state: pr.state } : {},
|
|
2933
|
+
...pr.isDraft ? { draft: true } : {},
|
|
2934
|
+
...pr.labels?.length ? { labels: pr.labels } : {},
|
|
2935
|
+
...pr.reviewers?.length ? { reviewers: pr.reviewers } : {},
|
|
2936
|
+
...pr.teams?.length ? { teams: pr.teams } : {},
|
|
2937
|
+
...pr.reviewDecision ? { reviewDecision: pr.reviewDecision } : {},
|
|
2938
|
+
...pr.tickets?.length ? { tickets: pr.tickets } : {}
|
|
2939
|
+
};
|
|
2940
|
+
}
|
|
2941
|
+
function formatMcpPrList(input) {
|
|
2942
|
+
return {
|
|
2943
|
+
...input.viewer ? { viewer: input.viewer } : {},
|
|
2944
|
+
...input.queue ? { queue: input.queue } : {},
|
|
2945
|
+
state: input.state,
|
|
2946
|
+
...input.labels?.length ? { labels: input.labels } : {},
|
|
2947
|
+
...input.reviewer ? { reviewer: input.reviewer } : {},
|
|
2948
|
+
...input.query ? { query: input.query } : {},
|
|
2949
|
+
limit: input.limit,
|
|
2950
|
+
returned: input.prs.length,
|
|
2951
|
+
truncated: input.truncated,
|
|
2952
|
+
...input.truncated ? {
|
|
2953
|
+
hint: "More PRs match. Pass a higher limit (max 250) or tighten label / reviewer / query."
|
|
2954
|
+
} : {},
|
|
2955
|
+
prs: input.prs.map(compactPrRow)
|
|
2956
|
+
};
|
|
2957
|
+
}
|
|
2958
|
+
|
|
2818
2959
|
// src/mcp/schedule-tools.ts
|
|
2819
2960
|
import { z as z4 } from "zod";
|
|
2820
2961
|
function text4(payload, isError = false) {
|
|
@@ -3373,7 +3514,7 @@ async function startMcpServer() {
|
|
|
3373
3514
|
);
|
|
3374
3515
|
}
|
|
3375
3516
|
try {
|
|
3376
|
-
const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-
|
|
3517
|
+
const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-H3INSR67.js");
|
|
3377
3518
|
orch.setMaxConcurrent(maxConcurrentAgents2());
|
|
3378
3519
|
} catch {
|
|
3379
3520
|
}
|
|
@@ -3393,14 +3534,21 @@ async function startMcpServer() {
|
|
|
3393
3534
|
if (!worktreeProfile) {
|
|
3394
3535
|
server.tool(
|
|
3395
3536
|
"list_workspaces",
|
|
3396
|
-
"List registered Sideboard workspaces (repos). Each line is name, path,
|
|
3537
|
+
"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
3538
|
{},
|
|
3398
3539
|
async () => {
|
|
3399
3540
|
const workspaces = orch.listWorkspaces();
|
|
3400
3541
|
const lines = await Promise.all(
|
|
3401
3542
|
workspaces.map(async (w) => {
|
|
3402
3543
|
const slug = await resolveGithubRepoSlug(w.path).catch(() => null);
|
|
3403
|
-
|
|
3544
|
+
let profile;
|
|
3545
|
+
try {
|
|
3546
|
+
profile = resolveViewerProfileForRepo(w.path);
|
|
3547
|
+
} catch {
|
|
3548
|
+
profile = resolveViewerProfile();
|
|
3549
|
+
}
|
|
3550
|
+
const suffix = formatWorkspaceProfileSuffix(profile);
|
|
3551
|
+
return slug ? `${w.name} ${w.path} github:${slug}${suffix}` : `${w.name} ${w.path}${suffix}`;
|
|
3404
3552
|
})
|
|
3405
3553
|
);
|
|
3406
3554
|
return {
|
|
@@ -3653,11 +3801,10 @@ async function startMcpServer() {
|
|
|
3653
3801
|
);
|
|
3654
3802
|
if (!worktreeProfile) {
|
|
3655
3803
|
registerSlackTools(server);
|
|
3656
|
-
|
|
3657
|
-
registerAbleTimeTools(server);
|
|
3804
|
+
registerConnectedIssueVendorTools(server);
|
|
3658
3805
|
registerScheduleTools(server);
|
|
3659
|
-
const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-
|
|
3660
|
-
const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-
|
|
3806
|
+
const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-SK2QISPE.js");
|
|
3807
|
+
const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-H3INSR67.js");
|
|
3661
3808
|
const accountDefaults = resolveThreadDefaults2();
|
|
3662
3809
|
const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
|
|
3663
3810
|
server.tool(
|
|
@@ -3700,7 +3847,7 @@ async function startMcpServer() {
|
|
|
3700
3847
|
);
|
|
3701
3848
|
server.tool(
|
|
3702
3849
|
"create_thread",
|
|
3703
|
-
`Create a worktree thread (chat) from branch, pr, or ticket.
|
|
3850
|
+
`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
3851
|
{
|
|
3705
3852
|
sourceType: z5.enum(["branch", "pr", "ticket"]),
|
|
3706
3853
|
sourceRef: z5.string(),
|
|
@@ -3727,7 +3874,7 @@ async function startMcpServer() {
|
|
|
3727
3874
|
);
|
|
3728
3875
|
server.tool(
|
|
3729
3876
|
"start_board_card",
|
|
3730
|
-
"Same as create_thread for a ticket, PR, or named branch (attaches issue text when Sideboard can resolve it).
|
|
3877
|
+
"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
3878
|
{
|
|
3732
3879
|
kind: z5.enum(["ticket", "pr", "branch"]),
|
|
3733
3880
|
ref: z5.string().describe("Ticket identifier (ENG-12), PR number (44), or branch name from list_board"),
|
|
@@ -4373,21 +4520,47 @@ async function startMcpServer() {
|
|
|
4373
4520
|
);
|
|
4374
4521
|
server.tool(
|
|
4375
4522
|
"list_prs",
|
|
4376
|
-
|
|
4377
|
-
{
|
|
4378
|
-
|
|
4523
|
+
'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.',
|
|
4524
|
+
{
|
|
4525
|
+
repoPath: z5.string(),
|
|
4526
|
+
query: z5.string().optional().describe("GitHub search tokens (title, draft:true, \u2026)"),
|
|
4527
|
+
queue: z5.enum(["review", "mine", "approved", "changes"]).optional().describe(
|
|
4528
|
+
'review = unclaimed eng-review inbox (use for "get me N tickets to review"). mine = review-requested:@me. approved / changes = eng-approved / eng-requested-changes.'
|
|
4529
|
+
),
|
|
4530
|
+
state: z5.enum(["open", "closed", "merged", "all", "review"]).optional().describe("GitHub PR state (default open). review is an alias for queue=review."),
|
|
4531
|
+
label: z5.string().optional().describe(
|
|
4532
|
+
"GitHub label / workflow tag. Comma-separated AND. Examples: eng-review, eng-approved, eng-requested-changes"
|
|
4533
|
+
),
|
|
4534
|
+
reviewer: z5.string().optional().describe(
|
|
4535
|
+
"me (review requested of you), unassigned (no individual reviewer; team queues like engineering-team still count), all, or a GitHub login"
|
|
4536
|
+
),
|
|
4537
|
+
limit: z5.number().int().positive().max(250).optional().describe("Page size (default 40, max 250). Raise when truncated is true.")
|
|
4538
|
+
},
|
|
4539
|
+
async ({ repoPath, query, queue, state, label, reviewer, limit }) => {
|
|
4379
4540
|
const root = await resolveRepoRoot(repoPath);
|
|
4380
|
-
const
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4541
|
+
const page = clampMcpIssueLimit(limit);
|
|
4542
|
+
const resolved = resolveListPrsOptions({
|
|
4543
|
+
query,
|
|
4544
|
+
queue,
|
|
4545
|
+
state,
|
|
4546
|
+
labels: label,
|
|
4547
|
+
reviewer,
|
|
4548
|
+
limit: page + 1
|
|
4549
|
+
});
|
|
4550
|
+
const prs = await listPrs(root, resolved);
|
|
4551
|
+
const windowed = applyIssueListWindow(prs, page);
|
|
4552
|
+
return mcpJson(
|
|
4553
|
+
formatMcpPrList({
|
|
4554
|
+
queue: resolved.queue,
|
|
4555
|
+
state: resolved.state,
|
|
4556
|
+
labels: resolved.labels,
|
|
4557
|
+
reviewer: resolved.reviewer,
|
|
4558
|
+
query: resolved.query,
|
|
4559
|
+
limit: page,
|
|
4560
|
+
prs: windowed.items,
|
|
4561
|
+
truncated: windowed.truncated
|
|
4562
|
+
})
|
|
4563
|
+
);
|
|
4391
4564
|
}
|
|
4392
4565
|
);
|
|
4393
4566
|
server.tool(
|
|
@@ -4512,28 +4685,27 @@ async function startMcpServer() {
|
|
|
4512
4685
|
);
|
|
4513
4686
|
server.tool(
|
|
4514
4687
|
"list_issues",
|
|
4515
|
-
"List or search issues
|
|
4688
|
+
"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
4689
|
{
|
|
4517
4690
|
repoPath: z5.string(),
|
|
4518
4691
|
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")
|
|
4692
|
+
assignee: z5.string().optional().describe("me (Linear default), unassigned, all, a user id, or a GitHub login"),
|
|
4693
|
+
limit: z5.number().int().positive().max(250).optional().describe("Page size (default 40, max 250). Raise when truncated is true.")
|
|
4520
4694
|
},
|
|
4521
|
-
async ({ repoPath, query, assignee }) => {
|
|
4695
|
+
async ({ repoPath, query, assignee, limit }) => {
|
|
4522
4696
|
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) }] };
|
|
4697
|
+
const page = clampMcpIssueLimit(limit);
|
|
4698
|
+
const result = await listIssues(root, { query, assignee, limit: page + 1 });
|
|
4699
|
+
const windowed = applyIssueListWindow(result.issues, page);
|
|
4700
|
+
return mcpJson(
|
|
4701
|
+
formatMcpIssueList({
|
|
4702
|
+
source: result.source,
|
|
4703
|
+
viewer: result.viewer?.name || result.viewer?.login,
|
|
4704
|
+
limit: page,
|
|
4705
|
+
issues: windowed.items,
|
|
4706
|
+
truncated: windowed.truncated
|
|
4707
|
+
})
|
|
4708
|
+
);
|
|
4537
4709
|
}
|
|
4538
4710
|
);
|
|
4539
4711
|
}
|
|
@@ -6816,6 +6988,10 @@ async function startSlackRelayServer(opts) {
|
|
|
6816
6988
|
}
|
|
6817
6989
|
export {
|
|
6818
6990
|
ABLETIME_MCP_PATH,
|
|
6991
|
+
ACCOUNT_ROLES,
|
|
6992
|
+
ACCOUNT_ROLE_LABELS,
|
|
6993
|
+
ACCOUNT_ROLE_MAX,
|
|
6994
|
+
ACCOUNT_ROLE_PRESETS,
|
|
6819
6995
|
AGENT_GIT_ACTIONS,
|
|
6820
6996
|
AGENT_RUNNER_MAX_OLD_SPACE_MB,
|
|
6821
6997
|
ATTACHMENTS_DIR,
|
|
@@ -6872,6 +7048,7 @@ export {
|
|
|
6872
7048
|
PLAN_FILE_REL,
|
|
6873
7049
|
PLAN_MODE_INSTRUCTION,
|
|
6874
7050
|
PLAN_QUESTION_ANSWERS_PREFIX,
|
|
7051
|
+
PROFILE_NOTES_MAX,
|
|
6875
7052
|
REPO_REVIEW_NAME,
|
|
6876
7053
|
REPO_REVIEW_PATH,
|
|
6877
7054
|
REVIEW_REQUEST_NAME,
|
|
@@ -6898,6 +7075,7 @@ export {
|
|
|
6898
7075
|
WORKTREE_MCP_TOOLS,
|
|
6899
7076
|
abletimeMcpRequest,
|
|
6900
7077
|
abletimeMcpUrl,
|
|
7078
|
+
accountRoleLabel,
|
|
6901
7079
|
ackSlackInboundSeen,
|
|
6902
7080
|
addBoardPin,
|
|
6903
7081
|
addPrStackLayer,
|
|
@@ -7032,6 +7210,7 @@ export {
|
|
|
7032
7210
|
discoverSkills,
|
|
7033
7211
|
dropCachedPrefixOnResume,
|
|
7034
7212
|
emptyPublicIntegrations,
|
|
7213
|
+
emptySetupLog,
|
|
7035
7214
|
encodeBrightsyTarget,
|
|
7036
7215
|
enrichPathWithNpmGlobalBin,
|
|
7037
7216
|
enrichWorkspacesWithGithub,
|
|
@@ -7065,7 +7244,9 @@ export {
|
|
|
7065
7244
|
findInvalidCacheControlTtlOrder,
|
|
7066
7245
|
findLastBrightsyContextSummary,
|
|
7067
7246
|
findLiveThreadForCreate,
|
|
7247
|
+
findLiveThreadForCreateSource,
|
|
7068
7248
|
findOrphanWorktrees,
|
|
7249
|
+
findProjectProfileKey,
|
|
7069
7250
|
findSlackCoordinator,
|
|
7070
7251
|
findThreadByRef,
|
|
7071
7252
|
findThreadForStackLayer,
|
|
@@ -7076,6 +7257,7 @@ export {
|
|
|
7076
7257
|
forkChatTab,
|
|
7077
7258
|
forkMessageSlice,
|
|
7078
7259
|
forkThreadWorktree,
|
|
7260
|
+
formatAccountProfilePlaybookLine,
|
|
7079
7261
|
formatAgentInstructions,
|
|
7080
7262
|
formatArtifactDirective,
|
|
7081
7263
|
formatBrightsyFetchError,
|
|
@@ -7094,6 +7276,7 @@ export {
|
|
|
7094
7276
|
formatPlanQuestionsForChat,
|
|
7095
7277
|
formatPrGateDirective,
|
|
7096
7278
|
formatProcessGuideDirective,
|
|
7279
|
+
formatProjectProfilePlaybookLines,
|
|
7097
7280
|
formatRateLimitResetHint,
|
|
7098
7281
|
formatRenameBranchDirective,
|
|
7099
7282
|
formatScheduleWhen,
|
|
@@ -7107,6 +7290,7 @@ export {
|
|
|
7107
7290
|
formatTranscriptMarkdown,
|
|
7108
7291
|
formatUiReminder,
|
|
7109
7292
|
formatWorkspaceInventory,
|
|
7293
|
+
formatWorkspaceProfileSuffix,
|
|
7110
7294
|
formatWorktreeDirective,
|
|
7111
7295
|
formatWorktreeReminder,
|
|
7112
7296
|
forwardContextUsage,
|
|
@@ -7212,11 +7396,13 @@ export {
|
|
|
7212
7396
|
isPresentPlanToolName,
|
|
7213
7397
|
isPrimaryCheckoutThread,
|
|
7214
7398
|
isSessionQuotaLimit,
|
|
7399
|
+
isSetupLastError,
|
|
7215
7400
|
isShellToolName,
|
|
7216
7401
|
isSideboardScratchPath,
|
|
7217
7402
|
isSlackCoordinatorThread,
|
|
7218
7403
|
isSlackExternalReplyPrompt,
|
|
7219
7404
|
isSlackOAuthCancelled,
|
|
7405
|
+
isStaleLastErrorDuringTurn,
|
|
7220
7406
|
isSubagentToolName,
|
|
7221
7407
|
isThinkingEffort,
|
|
7222
7408
|
isThisProcessDesktopHost,
|
|
@@ -7285,6 +7471,7 @@ export {
|
|
|
7285
7471
|
mergeAgentGitAuthEnv,
|
|
7286
7472
|
mergePr,
|
|
7287
7473
|
mergePrStack,
|
|
7474
|
+
mergeSetupOutput,
|
|
7288
7475
|
mergeSideboardIntoMcpServersJson,
|
|
7289
7476
|
mergeUsage,
|
|
7290
7477
|
messagePartParentId,
|
|
@@ -7333,6 +7520,7 @@ export {
|
|
|
7333
7520
|
planQuestionsSignature,
|
|
7334
7521
|
pollSlackOutboundWatches,
|
|
7335
7522
|
posixShellSingleQuote,
|
|
7523
|
+
preferTeamsForRole,
|
|
7336
7524
|
preferredCursorCostCents,
|
|
7337
7525
|
prepareTerminalCommand,
|
|
7338
7526
|
previewLand,
|
|
@@ -7341,6 +7529,7 @@ export {
|
|
|
7341
7529
|
readExistingReviewRequestFile,
|
|
7342
7530
|
readKeychainVaultKey,
|
|
7343
7531
|
readPlanFile,
|
|
7532
|
+
readSetupLog,
|
|
7344
7533
|
readSkillBody,
|
|
7345
7534
|
readThread,
|
|
7346
7535
|
readWorktreeFile,
|
|
@@ -7362,6 +7551,8 @@ export {
|
|
|
7362
7551
|
requireAgent,
|
|
7363
7552
|
resetGhStackDetectCache,
|
|
7364
7553
|
resetGithubAgentTokenMemo,
|
|
7554
|
+
resolveAccountProfile,
|
|
7555
|
+
resolveAccountProfileFromSettings,
|
|
7365
7556
|
resolveAgentExecutable,
|
|
7366
7557
|
resolveAgentGitAuthEnv,
|
|
7367
7558
|
resolveClaudeExecutable,
|
|
@@ -7393,7 +7584,10 @@ export {
|
|
|
7393
7584
|
resolveThreadDefaults,
|
|
7394
7585
|
resolveThreadEffort,
|
|
7395
7586
|
resolveVaultKey,
|
|
7587
|
+
resolveViewerProfile,
|
|
7588
|
+
resolveViewerProfileForRepo,
|
|
7396
7589
|
resolveWorktreeStartPoint,
|
|
7590
|
+
reviewTeamHintsForRoles,
|
|
7397
7591
|
rewriteAbleTimeError,
|
|
7398
7592
|
rewriteLinearError,
|
|
7399
7593
|
run,
|
|
@@ -7426,6 +7620,7 @@ export {
|
|
|
7426
7620
|
shouldRemoveWorktreeOnTeardown,
|
|
7427
7621
|
shouldResetSessionForOccupancy,
|
|
7428
7622
|
shouldRunWorktreeCleanup,
|
|
7623
|
+
shouldStampSetupLastError,
|
|
7429
7624
|
showCostEnabled,
|
|
7430
7625
|
sideboardHomeDir,
|
|
7431
7626
|
sideboardMcpProfile,
|
|
@@ -7493,6 +7688,7 @@ export {
|
|
|
7493
7688
|
updateIntegrationsSettings,
|
|
7494
7689
|
updateLinearIssue,
|
|
7495
7690
|
updateOpencodeSettings,
|
|
7691
|
+
updateProjectProfileSettings,
|
|
7496
7692
|
updateSchedule,
|
|
7497
7693
|
updateThread,
|
|
7498
7694
|
userClaudeMcpConfigPath,
|