@sideboard-ai/core 0.1.107 → 0.1.109

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 (38) hide show
  1. package/dist/agents/cursor-runner.js +2 -2
  2. package/dist/{agents-T4RHL5UX.js → agents-XB332VUJ.js} +5 -5
  3. package/dist/{agents-4XQANGFO.js → agents-YIMHDI46.js} +7 -7
  4. package/dist/{app-settings-2WH6DVOW.js → app-settings-EBCVMFF6.js} +1 -1
  5. package/dist/{app-settings-6AXBWM3K.js → app-settings-IYSSVZHH.js} +2 -2
  6. package/dist/{chunk-7ZTQHC2Q.js → chunk-4LKD3PGO.js} +1 -1
  7. package/dist/{chunk-TLPJHLLM.js → chunk-4TR3HZFT.js} +1 -1
  8. package/dist/{chunk-SMWVSSE5.js → chunk-756EO4GK.js} +3 -3
  9. package/dist/{chunk-XOYH3OMI.js → chunk-AY2EQI2P.js} +16 -13
  10. package/dist/{chunk-PZVA2VDF.js → chunk-EW7COXYE.js} +1 -1
  11. package/dist/{chunk-VTTTV2LM.js → chunk-FBV6NK62.js} +2 -2
  12. package/dist/{chunk-GYFNFU62.js → chunk-I2OJ2YSP.js} +8 -16
  13. package/dist/{chunk-6JJTMI7G.js → chunk-JVIW55KT.js} +1 -1
  14. package/dist/{chunk-6HRR4T4P.js → chunk-KKHDPV45.js} +15 -14
  15. package/dist/{chunk-XEFHG6VG.js → chunk-LTPX5N6K.js} +1310 -1265
  16. package/dist/{chunk-EX4NZN3O.js → chunk-NE4TOOKS.js} +1 -1
  17. package/dist/{chunk-LRO7YVLJ.js → chunk-OQDIYVDD.js} +2 -2
  18. package/dist/{chunk-3SIFRHJ3.js → chunk-Q6B3NRCT.js} +1457 -1431
  19. package/dist/{chunk-THXSFETX.js → chunk-TROJ3PVH.js} +3 -3
  20. package/dist/{chunk-5XUKY2JY.js → chunk-VRTKGKUW.js} +8 -16
  21. package/dist/{chunk-HUKCGRAT.js → chunk-WD2TARQS.js} +7 -2
  22. package/dist/{coordinator-prompt-4TUQUEHY.js → coordinator-prompt-JKOU6BWV.js} +4 -4
  23. package/dist/{coordinator-prompt-YQWRXCPX.js → coordinator-prompt-V66BYTUV.js} +3 -3
  24. package/dist/{global-workspace-V6TMECDU.js → global-workspace-NCTBE7G7.js} +5 -5
  25. package/dist/{global-workspace-H37LFFXI.js → global-workspace-WBQWQQQY.js} +4 -4
  26. package/dist/index.cjs +1697 -1661
  27. package/dist/index.d.cts +65 -24
  28. package/dist/index.d.ts +65 -24
  29. package/dist/index.js +107 -85
  30. package/dist/mcp/run-stdio.cjs +1660 -1619
  31. package/dist/mcp/run-stdio.js +82 -79
  32. package/dist/{orchestrator-DEHSKERK.js → orchestrator-6W7EKSPO.js} +9 -9
  33. package/dist/{orchestrator-2P7DX44Q.js → orchestrator-JVGVPKLI.js} +7 -7
  34. package/dist/{workspaces-JU3P6FHB.js → workspaces-I3554R3F.js} +5 -5
  35. package/dist/{workspaces-UPEVANU4.js → workspaces-SUBEDSGB.js} +6 -6
  36. package/dist/{worktree-NR5YJG2E.js → worktree-2UWO7VEK.js} +3 -3
  37. package/dist/{worktree-6MFKE465.js → worktree-7H6HB6GW.js} +2 -2
  38. package/package.json +1 -1
@@ -19,27 +19,27 @@ import {
19
19
  slackApi,
20
20
  slackTokenFor,
21
21
  updateSchedule
22
- } from "../chunk-XEFHG6VG.js";
22
+ } from "../chunk-LTPX5N6K.js";
23
23
  import {
24
24
  listModelsForAgent,
25
25
  sideboardMcpProfile
26
- } from "../chunk-XOYH3OMI.js";
26
+ } from "../chunk-AY2EQI2P.js";
27
27
  import "../chunk-7YKXHBIW.js";
28
- import "../chunk-LRO7YVLJ.js";
28
+ import "../chunk-OQDIYVDD.js";
29
29
  import "../chunk-N5PM7HGQ.js";
30
30
  import "../chunk-KLBOWJ74.js";
31
31
  import {
32
32
  GLOBAL_WORKSPACE_ID,
33
33
  isCloudCoordinatorThread
34
- } from "../chunk-THXSFETX.js";
35
- import "../chunk-5XUKY2JY.js";
34
+ } from "../chunk-TROJ3PVH.js";
35
+ import "../chunk-VRTKGKUW.js";
36
36
  import {
37
37
  listBranches,
38
38
  listPrs,
39
39
  resolveGithubRepoSlug,
40
40
  resolveRepoRoot,
41
41
  warmGithubAgentAuth
42
- } from "../chunk-6JJTMI7G.js";
42
+ } from "../chunk-JVIW55KT.js";
43
43
  import "../chunk-B3SJXYIJ.js";
44
44
  import "../chunk-P3BQ5DOL.js";
45
45
  import {
@@ -49,7 +49,7 @@ import {
49
49
  loadAppSettings,
50
50
  resolveEffectiveIssueSource,
51
51
  saveLinearOAuth
52
- } from "../chunk-EX4NZN3O.js";
52
+ } from "../chunk-NE4TOOKS.js";
53
53
  import "../chunk-NSTQ6QKD.js";
54
54
  import "../chunk-KGZBYWZ3.js";
55
55
  import "../chunk-BD2ICC4D.js";
@@ -1342,7 +1342,7 @@ async function startMcpServer() {
1342
1342
  );
1343
1343
  }
1344
1344
  try {
1345
- const { maxConcurrentAgents } = await import("../app-settings-2WH6DVOW.js");
1345
+ const { maxConcurrentAgents } = await import("../app-settings-EBCVMFF6.js");
1346
1346
  orch.setMaxConcurrent(maxConcurrentAgents());
1347
1347
  } catch {
1348
1348
  }
@@ -1358,74 +1358,77 @@ async function startMcpServer() {
1358
1358
  name: "sideboard",
1359
1359
  version: "0.1.0"
1360
1360
  });
1361
- server.tool(
1362
- "list_workspaces",
1363
- "List registered Sideboard workspaces (repos). Each line is name, path, and github:owner/repo when resolvable \u2014 use path as repoPath for list_branches/list_prs/list_issues/create_thread.",
1364
- {},
1365
- async () => {
1366
- const workspaces = orch.listWorkspaces();
1367
- const lines = await Promise.all(
1368
- workspaces.map(async (w) => {
1369
- const slug = await resolveGithubRepoSlug(w.path).catch(() => null);
1370
- return slug ? `${w.name} ${w.path} github:${slug}` : `${w.name} ${w.path}`;
1371
- })
1372
- );
1373
- return {
1374
- content: [
1375
- { type: "text", text: lines.join("\n") || "(no workspaces)" }
1376
- ]
1377
- };
1378
- }
1379
- );
1380
- server.tool(
1381
- "list_threads",
1382
- "List Sideboard threads across all workspaces (one summary line each \u2014 token-frugal). Each line ends with sideboard://thread/<id> \u2014 use that URL in markdown links so the UI can open the chat.",
1383
- {},
1384
- async () => {
1385
- const threads = orch.getThreads(true);
1386
- const lines = threads.map((t) => {
1387
- const repo = t.repoPath === GLOBAL_WORKSPACE_ID ? "Orchestration" : basename(t.repoPath) || t.repoPath;
1361
+ const worktreeProfile = sideboardMcpProfile() === "worktree";
1362
+ if (!worktreeProfile) {
1363
+ server.tool(
1364
+ "list_workspaces",
1365
+ "List registered Sideboard workspaces (repos). Each line is name, path, and github:owner/repo when resolvable \u2014 use path as repoPath for list_branches/list_prs/list_issues/create_thread.",
1366
+ {},
1367
+ async () => {
1368
+ const workspaces = orch.listWorkspaces();
1369
+ const lines = await Promise.all(
1370
+ workspaces.map(async (w) => {
1371
+ const slug = await resolveGithubRepoSlug(w.path).catch(() => null);
1372
+ return slug ? `${w.name} ${w.path} github:${slug}` : `${w.name} ${w.path}`;
1373
+ })
1374
+ );
1375
+ return {
1376
+ content: [
1377
+ { type: "text", text: lines.join("\n") || "(no workspaces)" }
1378
+ ]
1379
+ };
1380
+ }
1381
+ );
1382
+ server.tool(
1383
+ "list_threads",
1384
+ "List Sideboard threads across all workspaces (one summary line each \u2014 token-frugal). Each line ends with sideboard://thread/<id> \u2014 use that URL in markdown links so the UI can open the chat.",
1385
+ {},
1386
+ async () => {
1387
+ const threads = orch.getThreads(true);
1388
+ const lines = threads.map((t) => {
1389
+ const repo = t.repoPath === GLOBAL_WORKSPACE_ID ? "Orchestration" : basename(t.repoPath) || t.repoPath;
1390
+ const live = t.status === "running" || t.status === "queued" ? readTurnLive(t.id) : null;
1391
+ const progress = live?.summary ? ` ${live.summary}` : "";
1392
+ return `${t.id.slice(0, 8)} ${t.status.padEnd(9)} ${t.agent.padEnd(8)} ${repo} ${t.sourceType}:${t.sourceRef} ${t.title} sideboard://thread/${t.id}${t.devPort ? ` http://localhost:${t.devPort}` : ""}${progress}`;
1393
+ });
1394
+ return {
1395
+ content: [{ type: "text", text: lines.join("\n") || "(no threads)" }]
1396
+ };
1397
+ }
1398
+ );
1399
+ server.tool(
1400
+ "get_thread",
1401
+ "Get a compact thread summary by id/ref. While running, includes progress (last tool/thinking) and lastActivityAt.",
1402
+ { ref: z4.string() },
1403
+ async ({ ref }) => {
1404
+ const t = orch.getThread(ref);
1405
+ if (!t) {
1406
+ return { content: [{ type: "text", text: `Thread not found: ${ref}` }], isError: true };
1407
+ }
1388
1408
  const live = t.status === "running" || t.status === "queued" ? readTurnLive(t.id) : null;
1389
- const progress = live?.summary ? ` ${live.summary}` : "";
1390
- return `${t.id.slice(0, 8)} ${t.status.padEnd(9)} ${t.agent.padEnd(8)} ${repo} ${t.sourceType}:${t.sourceRef} ${t.title} sideboard://thread/${t.id}${t.devPort ? ` http://localhost:${t.devPort}` : ""}${progress}`;
1391
- });
1392
- return {
1393
- content: [{ type: "text", text: lines.join("\n") || "(no threads)" }]
1394
- };
1395
- }
1396
- );
1397
- server.tool(
1398
- "get_thread",
1399
- "Get a compact thread summary by id/ref. While running, includes progress (last tool/thinking) and lastActivityAt.",
1400
- { ref: z4.string() },
1401
- async ({ ref }) => {
1402
- const t = orch.getThread(ref);
1403
- if (!t) {
1404
- return { content: [{ type: "text", text: `Thread not found: ${ref}` }], isError: true };
1409
+ const summary = {
1410
+ id: t.id,
1411
+ title: t.title,
1412
+ status: t.status,
1413
+ agent: t.agent,
1414
+ sourceType: t.sourceType,
1415
+ sourceRef: t.sourceRef,
1416
+ branchName: t.branchName,
1417
+ worktreePath: t.worktreePath,
1418
+ sessionId: t.sessionId,
1419
+ queueLength: t.queue.length,
1420
+ messageCount: t.messages.length,
1421
+ devPort: t.devPort,
1422
+ prUrl: t.prUrl,
1423
+ lastError: t.lastError ?? null,
1424
+ stillRunning: t.status === "running" || t.status === "queued",
1425
+ progress: live?.summary ?? null,
1426
+ lastActivityAt: live?.updatedAt ?? null
1427
+ };
1428
+ return { content: [{ type: "text", text: JSON.stringify(summary, null, 2) }] };
1405
1429
  }
1406
- const live = t.status === "running" || t.status === "queued" ? readTurnLive(t.id) : null;
1407
- const summary = {
1408
- id: t.id,
1409
- title: t.title,
1410
- status: t.status,
1411
- agent: t.agent,
1412
- sourceType: t.sourceType,
1413
- sourceRef: t.sourceRef,
1414
- branchName: t.branchName,
1415
- worktreePath: t.worktreePath,
1416
- sessionId: t.sessionId,
1417
- queueLength: t.queue.length,
1418
- messageCount: t.messages.length,
1419
- devPort: t.devPort,
1420
- prUrl: t.prUrl,
1421
- lastError: t.lastError ?? null,
1422
- stillRunning: t.status === "running" || t.status === "queued",
1423
- progress: live?.summary ?? null,
1424
- lastActivityAt: live?.updatedAt ?? null
1425
- };
1426
- return { content: [{ type: "text", text: JSON.stringify(summary, null, 2) }] };
1427
- }
1428
- );
1430
+ );
1431
+ }
1429
1432
  server.tool(
1430
1433
  "present_artifact",
1431
1434
  "Show an HTML, SVG, markdown, or React document in Sideboard\u2019s Claude-style side column (desktop). Use instead of claude.ai\u2019s artifact tool \u2014 pass the full document content. Prefer type=html for interactive pages. For type=react, pass a single component module that `export default`s a component (JSX/TSX ok) \u2014 Sideboard bootstraps React/ReactDOM/Babel and renders it; only `react`/`react-dom` imports are available, no other npm packages.",
@@ -1554,12 +1557,12 @@ async function startMcpServer() {
1554
1557
  return { content: [{ type: "text", text: JSON.stringify(payload) }] };
1555
1558
  }
1556
1559
  );
1557
- registerSlackTools(server);
1558
- registerLinearTools(server);
1559
- if (sideboardMcpProfile() !== "worktree") {
1560
+ if (!worktreeProfile) {
1561
+ registerSlackTools(server);
1562
+ registerLinearTools(server);
1560
1563
  registerScheduleTools(server);
1561
1564
  const { getCaffeinateHold, setCaffeinateHold } = await import("../caffeinate-hold-NBRUWYXO.js");
1562
- const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-2WH6DVOW.js");
1565
+ const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-EBCVMFF6.js");
1563
1566
  const accountDefaults = resolveThreadDefaults();
1564
1567
  const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
1565
1568
  server.tool(
@@ -1910,7 +1913,7 @@ async function startMcpServer() {
1910
1913
  );
1911
1914
  server.tool(
1912
1915
  "request_review",
1913
- 'Start a merge-readiness Review on a worktree agent thread (same as the desktop Review button). Opens a new Review chat tab, attaches .sideboard/review.md when present (else local Review request.md / stock template), and sends "Review changes in this workspace." Expect Approve / Approve with nits / Request changes / Needs more information. Pass a worktree thread ref \u2014 not the orchestrator. Then wait_for_turn (loop while stillRunning) / get_turn_result on the returned review tab id.',
1916
+ 'Start a merge-readiness Review on a worktree agent thread (same as the desktop Review button). Opens a new Review chat tab, attaches .claude/skills/review/SKILL.md when present (else seeds that skill from .sideboard/review.md or the stock template), and sends "Review changes in this workspace." Expect Approve / Approve with nits / Request changes / Needs more information. Pass a worktree thread ref \u2014 not the orchestrator. Then wait_for_turn (loop while stillRunning) / get_turn_result on the returned review tab id.',
1914
1917
  { ref: z4.string().describe("Worktree thread id/ref to review") },
1915
1918
  async ({ ref }) => {
1916
1919
  try {
@@ -4,20 +4,20 @@ import {
4
4
  isPidAlive,
5
5
  startOrchestration,
6
6
  waitForPidExit
7
- } from "./chunk-3SIFRHJ3.js";
8
- import "./chunk-6HRR4T4P.js";
7
+ } from "./chunk-Q6B3NRCT.js";
8
+ import "./chunk-KKHDPV45.js";
9
9
  import "./chunk-2GO3YKBA.js";
10
- import "./chunk-VTTTV2LM.js";
11
- import "./chunk-SMWVSSE5.js";
12
- import "./chunk-GYFNFU62.js";
10
+ import "./chunk-FBV6NK62.js";
11
+ import "./chunk-756EO4GK.js";
12
+ import "./chunk-I2OJ2YSP.js";
13
13
  import "./chunk-QTUESPAW.js";
14
14
  import "./chunk-MMI4RJ5I.js";
15
- import "./chunk-HUKCGRAT.js";
15
+ import "./chunk-WD2TARQS.js";
16
16
  import "./chunk-DCOZABNT.js";
17
- import "./chunk-PZVA2VDF.js";
17
+ import "./chunk-EW7COXYE.js";
18
18
  import "./chunk-FKOIHGKV.js";
19
- import "./chunk-7ZTQHC2Q.js";
20
- import "./chunk-TLPJHLLM.js";
19
+ import "./chunk-4LKD3PGO.js";
20
+ import "./chunk-4TR3HZFT.js";
21
21
  import "./chunk-JT7R45JB.js";
22
22
  import "./chunk-KGSVLZV6.js";
23
23
  import "./chunk-77WWLBCI.js";
@@ -6,18 +6,18 @@ import {
6
6
  isPidAlive,
7
7
  startOrchestration,
8
8
  waitForPidExit
9
- } from "./chunk-XEFHG6VG.js";
10
- import "./chunk-XOYH3OMI.js";
9
+ } from "./chunk-LTPX5N6K.js";
10
+ import "./chunk-AY2EQI2P.js";
11
11
  import "./chunk-7YKXHBIW.js";
12
- import "./chunk-LRO7YVLJ.js";
12
+ import "./chunk-OQDIYVDD.js";
13
13
  import "./chunk-N5PM7HGQ.js";
14
14
  import "./chunk-KLBOWJ74.js";
15
- import "./chunk-THXSFETX.js";
16
- import "./chunk-5XUKY2JY.js";
17
- import "./chunk-6JJTMI7G.js";
15
+ import "./chunk-TROJ3PVH.js";
16
+ import "./chunk-VRTKGKUW.js";
17
+ import "./chunk-JVIW55KT.js";
18
18
  import "./chunk-B3SJXYIJ.js";
19
19
  import "./chunk-P3BQ5DOL.js";
20
- import "./chunk-EX4NZN3O.js";
20
+ import "./chunk-NE4TOOKS.js";
21
21
  import "./chunk-NSTQ6QKD.js";
22
22
  import "./chunk-KGZBYWZ3.js";
23
23
  import "./chunk-BD2ICC4D.js";
@@ -6,13 +6,13 @@ import {
6
6
  listWorkspaces,
7
7
  removeWorkspace,
8
8
  syncWorkspacesFromThreads
9
- } from "./chunk-LRO7YVLJ.js";
10
- import "./chunk-THXSFETX.js";
11
- import "./chunk-5XUKY2JY.js";
12
- import "./chunk-6JJTMI7G.js";
9
+ } from "./chunk-OQDIYVDD.js";
10
+ import "./chunk-TROJ3PVH.js";
11
+ import "./chunk-VRTKGKUW.js";
12
+ import "./chunk-JVIW55KT.js";
13
13
  import "./chunk-B3SJXYIJ.js";
14
14
  import "./chunk-P3BQ5DOL.js";
15
- import "./chunk-EX4NZN3O.js";
15
+ import "./chunk-NE4TOOKS.js";
16
16
  import "./chunk-NSTQ6QKD.js";
17
17
  import "./chunk-KGZBYWZ3.js";
18
18
  import "./chunk-BD2ICC4D.js";
@@ -4,13 +4,13 @@ import {
4
4
  listWorkspaces,
5
5
  removeWorkspace,
6
6
  syncWorkspacesFromThreads
7
- } from "./chunk-VTTTV2LM.js";
8
- import "./chunk-SMWVSSE5.js";
9
- import "./chunk-GYFNFU62.js";
10
- import "./chunk-PZVA2VDF.js";
7
+ } from "./chunk-FBV6NK62.js";
8
+ import "./chunk-756EO4GK.js";
9
+ import "./chunk-I2OJ2YSP.js";
10
+ import "./chunk-EW7COXYE.js";
11
11
  import "./chunk-FKOIHGKV.js";
12
- import "./chunk-7ZTQHC2Q.js";
13
- import "./chunk-TLPJHLLM.js";
12
+ import "./chunk-4LKD3PGO.js";
13
+ import "./chunk-4TR3HZFT.js";
14
14
  import "./chunk-JT7R45JB.js";
15
15
  import "./chunk-KGSVLZV6.js";
16
16
  import "./chunk-77WWLBCI.js";
@@ -47,10 +47,10 @@ import {
47
47
  worktreeDisplayLabel,
48
48
  worktreeDisplayLabelForGroup,
49
49
  worktreeNameFromPath
50
- } from "./chunk-PZVA2VDF.js";
50
+ } from "./chunk-EW7COXYE.js";
51
51
  import "./chunk-FKOIHGKV.js";
52
- import "./chunk-7ZTQHC2Q.js";
53
- import "./chunk-TLPJHLLM.js";
52
+ import "./chunk-4LKD3PGO.js";
53
+ import "./chunk-4TR3HZFT.js";
54
54
  import "./chunk-JT7R45JB.js";
55
55
  import "./chunk-KGSVLZV6.js";
56
56
  import "./chunk-77WWLBCI.js";
@@ -49,10 +49,10 @@ import {
49
49
  worktreeDisplayLabel,
50
50
  worktreeDisplayLabelForGroup,
51
51
  worktreeNameFromPath
52
- } from "./chunk-6JJTMI7G.js";
52
+ } from "./chunk-JVIW55KT.js";
53
53
  import "./chunk-B3SJXYIJ.js";
54
54
  import "./chunk-P3BQ5DOL.js";
55
- import "./chunk-EX4NZN3O.js";
55
+ import "./chunk-NE4TOOKS.js";
56
56
  import "./chunk-NSTQ6QKD.js";
57
57
  import "./chunk-KGZBYWZ3.js";
58
58
  import "./chunk-BD2ICC4D.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideboard-ai/core",
3
- "version": "0.1.107",
3
+ "version": "0.1.109",
4
4
  "description": "Sideboard core — orchestration, agents, git worktrees, MCP server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",