@sideboard-ai/core 0.1.155 → 0.1.157

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/{abletime-JSTJLXAW.js → abletime-BEIDJG7W.js} +5 -1
  2. package/dist/{abletime-H7LPGIP2.js → abletime-GWZE6OYM.js} +5 -1
  3. package/dist/agents/cursor-runner.cjs +6 -1
  4. package/dist/agents/cursor-runner.js +6 -1
  5. package/dist/{agents-V24DYZI4.js → agents-C55LAEUR.js} +4 -2
  6. package/dist/{agents-YVW75KBO.js → agents-LCDXN2B2.js} +4 -2
  7. package/dist/{chunk-RNC3GR6L.js → chunk-4I4VKAPZ.js} +5 -4
  8. package/dist/{chunk-2F63IMCL.js → chunk-CVR4RJ6G.js} +5 -4
  9. package/dist/{chunk-JOK4XWBG.js → chunk-DVJBO3M7.js} +87 -3
  10. package/dist/{chunk-J2OKVOBM.js → chunk-GWEEGE6L.js} +119 -10
  11. package/dist/{chunk-4THE3EY7.js → chunk-KQ4JOGUH.js} +214 -39
  12. package/dist/{chunk-FDCFXMDG.js → chunk-N27GVFZY.js} +87 -3
  13. package/dist/{chunk-46ZTBUVJ.js → chunk-SUCJAWV4.js} +90 -9
  14. package/dist/{chunk-QZEZXYVV.js → chunk-TIJ6QVX5.js} +305 -33
  15. package/dist/{coordinator-prompt-7FHKCWXB.js → coordinator-prompt-26IJU2AV.js} +1 -1
  16. package/dist/{coordinator-prompt-KX2FVVYT.js → coordinator-prompt-AM47SATF.js} +1 -1
  17. package/dist/{global-workspace-2BRRKSDN.js → global-workspace-5BIW26YR.js} +1 -1
  18. package/dist/{global-workspace-4LHCZ2DC.js → global-workspace-QV7CC7SK.js} +1 -1
  19. package/dist/index.cjs +1438 -695
  20. package/dist/index.d.cts +150 -3
  21. package/dist/index.d.ts +150 -3
  22. package/dist/index.js +600 -322
  23. package/dist/mcp/run-stdio.cjs +1223 -573
  24. package/dist/mcp/run-stdio.js +501 -199
  25. package/dist/{orchestrator-HC7XVGJB.js → orchestrator-BUH3LJLL.js} +3 -3
  26. package/dist/{orchestrator-3FWEKDAQ.js → orchestrator-KQO4MXBI.js} +3 -3
  27. package/dist/{workspaces-5UNDTN4G.js → workspaces-NYSM2EPX.js} +1 -1
  28. package/dist/{workspaces-MQYNZXUK.js → workspaces-Q2VCHIAS.js} +1 -1
  29. package/package.json +1 -1
@@ -33,7 +33,7 @@ import {
33
33
  summarizeTurnStderr,
34
34
  toolDescription,
35
35
  turnFailChatText
36
- } from "./chunk-4THE3EY7.js";
36
+ } from "./chunk-KQ4JOGUH.js";
37
37
  import {
38
38
  extractPresentedPlan,
39
39
  readPlanFile,
@@ -67,7 +67,7 @@ import {
67
67
  stageAbsolutePathsAsAttachments,
68
68
  stageBuffersAsAttachments,
69
69
  syncWorkspacesFromThreads
70
- } from "./chunk-RNC3GR6L.js";
70
+ } from "./chunk-4I4VKAPZ.js";
71
71
  import {
72
72
  addPrStackLayer,
73
73
  allocateTeamName,
@@ -147,11 +147,13 @@ import {
147
147
  childEnvWithAppSettings,
148
148
  getIssueSource,
149
149
  isAbleTimeConnected,
150
+ isLinearConnected,
150
151
  isSecureFileEncrypted,
151
152
  loadAppSettings,
152
153
  orchestrationQuotaFallbackAgent,
153
154
  orchestrationQuotaOnLimit,
154
155
  readSecureJson,
156
+ resolveEffectiveIssueSource,
155
157
  resolveNewThreadOptions,
156
158
  resolveThreadDefaults,
157
159
  resolveVaultKey,
@@ -392,7 +394,7 @@ async function continueSourceThread(threadId, prompt) {
392
394
  await continueOnReply(threadId, prompt);
393
395
  return;
394
396
  }
395
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-3FWEKDAQ.js");
397
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-KQO4MXBI.js");
396
398
  await getOrchestrator2().send(threadId, prompt);
397
399
  } catch {
398
400
  }
@@ -733,9 +735,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
733
735
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
734
736
  );
735
737
  }
736
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-4LHCZ2DC.js");
738
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-QV7CC7SK.js");
737
739
  if (isGlobalThread2(thread)) {
738
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-KX2FVVYT.js");
740
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-AM47SATF.js");
739
741
  ensureGlobalCoordinatorCwd2(
740
742
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
741
743
  );
@@ -3073,7 +3075,7 @@ async function createThread(input, _onSetupLine) {
3073
3075
  let sourceIsFork = false;
3074
3076
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
3075
3077
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
3076
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-JSTJLXAW.js");
3078
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-BEIDJG7W.js");
3077
3079
  const task = await ensureAbleTimeTask({
3078
3080
  title: title?.trim() || "Untitled work",
3079
3081
  description: input.prompt?.trim() || void 0
@@ -3569,7 +3571,7 @@ async function adoptThread(input) {
3569
3571
  messages: input.messages ?? []
3570
3572
  });
3571
3573
  writeThread(thread);
3572
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-MQYNZXUK.js");
3574
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-Q2VCHIAS.js");
3573
3575
  await ensureWorkspace2(repoPath);
3574
3576
  const { ensureWorktreeSideboardIgnored: ensureWorktreeSideboardIgnored2 } = await import("./worktree-exclude-N5X5I422.js");
3575
3577
  await ensureWorktreeSideboardIgnored2(input.worktreePath);
@@ -5372,6 +5374,66 @@ function formatWorktreeDirective(thread, opts) {
5372
5374
  function formatWorktreeReminder() {
5373
5375
  return "Sideboard worktree: stay in this cwd for all file and git work. Push and open PRs against origin, never upstream. Do not edit the main repo checkout. If a goal is given (Greptile 5/5, CI green), watch-fix-push until it lands \u2014 do not watch after every push.";
5374
5376
  }
5377
+ var GITHUB_TICKET_REF = /^(?:#?\d+|gh-\d+)$/i;
5378
+ var KEYED_TICKET_REF = /^(?:[A-Z][A-Z0-9]{0,9}-\d+|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i;
5379
+ function issueTicketFromThread(thread, preferredSource = "github") {
5380
+ if (thread?.sourceType !== "ticket") return null;
5381
+ const ref = thread.sourceRef?.trim() ?? "";
5382
+ if (!ref) return null;
5383
+ if (/github\.com\/[^/]+\/[^/]+\/issues\/\d+/i.test(ref) || GITHUB_TICKET_REF.test(ref)) {
5384
+ return { id: ref, provider: "github" };
5385
+ }
5386
+ if (KEYED_TICKET_REF.test(ref)) {
5387
+ return { id: ref, provider: preferredSource === "github" ? "linear" : preferredSource };
5388
+ }
5389
+ return { id: ref, provider: preferredSource };
5390
+ }
5391
+ function formatIssueToolsDirective(opts) {
5392
+ const github = opts.github !== false;
5393
+ if (!opts.linear && !opts.abletime && !github) return null;
5394
+ const lines = [
5395
+ "Issue tracking (Settings \u2192 Issues / Git \u2014 already signed in):",
5396
+ "- Use Sideboard `linear_*` / `github_*` / `abletime_*` tools. Do not call Claude Linear MCP, vendor GitHub MCP, or any other vendor issue MCP \u2014 those need a separate login and hang. If a vendor namespace shows needsAuth, ignore it and keep going with Sideboard tools."
5397
+ ];
5398
+ if (opts.linear) {
5399
+ lines.push(
5400
+ "- Linear: `linear_get_issue` (comments), `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."
5401
+ );
5402
+ }
5403
+ if (github) {
5404
+ lines.push(
5405
+ "- GitHub: `github_get_issue` (comments), `github_comment`, `github_update_issue` (state open|closed), `github_create_issue` (pass `parent` for spin-offs). Uses Account `gh`."
5406
+ );
5407
+ }
5408
+ if (opts.abletime) {
5409
+ lines.push(
5410
+ "- AbleTime: `abletime_get_task` (comments), `abletime_comment`, `abletime_update_task` (state), `abletime_create_task` (pass `parent` for spin-offs; `abletime_list_projects` if needed)."
5411
+ );
5412
+ }
5413
+ lines.push(
5414
+ "- Do not ask the user to `claude mcp login` for tickets. Reconnect the Account source in Settings \u2192 Issues (or Git for `gh`)."
5415
+ );
5416
+ const ticket = opts.ticketId?.trim();
5417
+ if (ticket) {
5418
+ const provider = opts.ticketProvider ?? "linear";
5419
+ lines.push(
5420
+ `- This thread's ticket is \`${ticket}\` (${provider}). Use that id for get/comment/update; pass it as \`parent\` on spin-offs.`
5421
+ );
5422
+ }
5423
+ return lines.join("\n");
5424
+ }
5425
+ function formatIssueToolsReminder(opts) {
5426
+ const github = opts.github !== false;
5427
+ if (!opts.linear && !opts.abletime && !github) return null;
5428
+ const names = [
5429
+ opts.linear ? "linear_*" : null,
5430
+ github ? "github_*" : null,
5431
+ opts.abletime ? "abletime_*" : null
5432
+ ].filter(Boolean);
5433
+ const ticket = opts.ticketId?.trim();
5434
+ const ticketBit = ticket ? ` This ticket: ${ticket}${opts.ticketProvider ? ` (${opts.ticketProvider})` : ""} \u2014 get/comment/update; create with parent for spin-offs.` : " get/comment/update/create (parent= for spin-offs).";
5435
+ return `Issues: Sideboard ${names.join(" / ")} (Account). Ignore vendor issue MCP auth.${ticketBit}`;
5436
+ }
5375
5437
  function formatPrGateDirective() {
5376
5438
  return [
5377
5439
  "If a goal is given (not after every push):",
@@ -5790,7 +5852,7 @@ function formatScheduledPrompt(name, prompt) {
5790
5852
  ${prompt}`;
5791
5853
  }
5792
5854
  async function defaultDeps() {
5793
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-3FWEKDAQ.js");
5855
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-KQO4MXBI.js");
5794
5856
  const orch = getOrchestrator2();
5795
5857
  return {
5796
5858
  findThread: (id) => findThreadByRef(id),
@@ -6558,6 +6620,14 @@ var Orchestrator = class {
6558
6620
  const longRunningReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatLongRunningReminder() : null;
6559
6621
  const worktreeReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatWorktreeReminder() : null;
6560
6622
  const optionalServicesReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatOptionalServicesReminder(loadAppSettings().integrations) : null;
6623
+ const issueTicket = issueTicketFromThread(thread, resolveEffectiveIssueSource());
6624
+ const issueToolsReminder = thread.agent !== "brightsy" && !isOrchestratorThread(thread) ? formatIssueToolsReminder({
6625
+ linear: isLinearConnected(),
6626
+ abletime: isAbleTimeConnected(),
6627
+ github: true,
6628
+ ticketId: issueTicket?.id,
6629
+ ticketProvider: issueTicket?.provider
6630
+ }) : null;
6561
6631
  const slackReplyContext = formatSlackRepliesForTurn(
6562
6632
  pendingSlackExternalReplies(thread.messages)
6563
6633
  );
@@ -6566,6 +6636,7 @@ var Orchestrator = class {
6566
6636
  orchestrationReminder,
6567
6637
  worktreeReminder,
6568
6638
  optionalServicesReminder,
6639
+ issueToolsReminder,
6569
6640
  artifactReminder,
6570
6641
  longRunningReminder,
6571
6642
  slackReplyContext,
@@ -6598,6 +6669,14 @@ var Orchestrator = class {
6598
6669
  const artifactDirective = isBrightsy ? null : formatArtifactDirective();
6599
6670
  const longRunningDirective = isBrightsy || isOrchestration ? null : formatLongRunningDirective();
6600
6671
  const optionalServicesDirective = isBrightsy || isOrchestration ? null : formatOptionalServicesDirective(loadAppSettings().integrations);
6672
+ const freshIssueTicket = issueTicketFromThread(fresh, resolveEffectiveIssueSource());
6673
+ const issueToolsDirective = isBrightsy || isOrchestration ? null : formatIssueToolsDirective({
6674
+ linear: isLinearConnected(),
6675
+ abletime: isAbleTimeConnected(),
6676
+ github: true,
6677
+ ticketId: freshIssueTicket?.id,
6678
+ ticketProvider: freshIssueTicket?.provider
6679
+ });
6601
6680
  const settings = loadWorkspaceSettings(fresh.worktreePath, fresh.repoPath);
6602
6681
  const renameBranchDirective = !isBrightsy && !isOrchestration && autoRenameBranchEnabled() ? formatRenameBranchDirective(fresh, {
6603
6682
  customPrompt: settings?.prompts?.renameBranch
@@ -6628,6 +6707,7 @@ var Orchestrator = class {
6628
6707
  coordinatorDirective,
6629
6708
  worktreeDirective,
6630
6709
  optionalServicesDirective,
6710
+ issueToolsDirective,
6631
6711
  artifactDirective,
6632
6712
  longRunningDirective,
6633
6713
  renameBranchDirective,
@@ -6737,6 +6817,7 @@ var Orchestrator = class {
6737
6817
  coordinatorDirective,
6738
6818
  worktreeDirective,
6739
6819
  optionalServicesDirective,
6820
+ issueToolsDirective,
6740
6821
  artifactDirective,
6741
6822
  longRunningDirective,
6742
6823
  renameBranchDirective,
@@ -7791,7 +7872,7 @@ var Orchestrator = class {
7791
7872
  this.emit({ type: "status_changed", threadId: archived.id, status: "archived" });
7792
7873
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
7793
7874
  try {
7794
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-MQYNZXUK.js");
7875
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-Q2VCHIAS.js");
7795
7876
  await ensureWorkspace2(thread.repoPath);
7796
7877
  } catch {
7797
7878
  }