@sideboard-ai/core 0.1.151 → 0.1.152
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/{agents-JAOMXDXN.js → agents-CUKWIM34.js} +3 -3
- package/dist/{agents-U2JCFXW4.js → agents-VHXCBBBD.js} +3 -3
- package/dist/{chunk-77MP647F.js → chunk-2U6QF3PT.js} +6 -5
- package/dist/{chunk-TSCWSAQL.js → chunk-67TIJ7S5.js} +1 -1
- package/dist/{chunk-6H4TJ5TA.js → chunk-6X7Z34XE.js} +95 -50
- package/dist/{chunk-GCWAAPJ5.js → chunk-7BQNSUR2.js} +86 -65
- package/dist/{chunk-OXOU2FRS.js → chunk-7TIUOYBK.js} +6 -5
- package/dist/{chunk-LZAOX76N.js → chunk-EY6QXPPO.js} +2 -2
- package/dist/{chunk-ADCEGG4A.js → chunk-G4MTYUWS.js} +1 -1
- package/dist/{chunk-UIS7BVCX.js → chunk-GFQ57XAX.js} +2 -2
- package/dist/{chunk-HWZWBJWL.js → chunk-K2ANSHUO.js} +1 -1
- package/dist/{chunk-Y2FNDKHF.js → chunk-SN6CMKF6.js} +1 -1
- package/dist/{coordinator-prompt-ZK5MII7W.js → coordinator-prompt-TBX4MOFM.js} +1 -1
- package/dist/{coordinator-prompt-LWYUZAXR.js → coordinator-prompt-WGFRYCHE.js} +1 -1
- package/dist/{global-workspace-T7RL3XEC.js → global-workspace-BHLUJ46D.js} +2 -2
- package/dist/{global-workspace-IB2CCEJF.js → global-workspace-IY5QAV5C.js} +2 -2
- package/dist/index.cjs +112 -47
- package/dist/index.d.cts +34 -20
- package/dist/index.d.ts +34 -20
- package/dist/index.js +29 -7
- package/dist/mcp/run-stdio.cjs +101 -63
- package/dist/mcp/run-stdio.js +23 -7
- package/dist/{orchestrator-Y5MWUU7C.js → orchestrator-256DFPSX.js} +5 -5
- package/dist/{orchestrator-DPTRBKEH.js → orchestrator-NUA6SEV7.js} +5 -5
- package/dist/{workspaces-ZXCUVCZC.js → workspaces-4FSXVIZM.js} +3 -3
- package/dist/{workspaces-VICQYI2N.js → workspaces-NECIQTAO.js} +3 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -6611,7 +6611,7 @@ function ensureGlobalCoordinatorCwd(opts) {
|
|
|
6611
6611
|
"Typical flow (Home board): list_board \u2192 create_thread (sourceType=ticket|pr|branch) \u2192 send_to_thread \u2192 wait_for_turn (loop while stillRunning) \u2192 ask_git create-draft \u2192 wait_for_turn. Merge only if the user explicitly asked (`ask_git` merge).",
|
|
6612
6612
|
"Typical flow (branch / explicit source): list_workspaces \u2192 list_branches|list_prs|list_issues \u2192 create_thread \u2192 send_to_thread \u2192 wait_for_turn (loop while stillRunning) \u2192 ask_git create-draft.",
|
|
6613
6613
|
"Typical flow (new app): Bash create/clone under repos dir \u2192 add_workspace \u2192 create_thread \u2192 send_to_thread (implement) \u2192 wait_for_turn (loop while stillRunning) \u2192 ask_git create-draft.",
|
|
6614
|
-
"Always ask worktree agents to commit, push, and open draft PRs (`ask_git` / `send_to_thread`). Tell them to merge only when the user explicitly asked. The worktree agent runs git/gh; never merge from this orchestration cwd."
|
|
6614
|
+
"Always ask worktree agents to commit, push, and open draft PRs (`ask_git` / `send_to_thread`). If the user gave a goal (Greptile 5/5, CI green), pass that goal through so they watch-fix-push until it lands \u2014 do not start that loop on a plain push, and do not tell the human to poll. Tell them to merge only when the user explicitly asked. The worktree agent runs git/gh; never merge from this orchestration cwd."
|
|
6615
6615
|
].join("\n");
|
|
6616
6616
|
try {
|
|
6617
6617
|
(0, import_node_fs18.writeFileSync)((0, import_node_path20.join)(dir, "CLAUDE.md"), `${body}
|
|
@@ -6691,15 +6691,16 @@ var init_coordinator_prompt = __esm({
|
|
|
6691
6691
|
"- list_run_scripts / run_dev_script / stop_dev_script \u2014 start/stop named run scripts",
|
|
6692
6692
|
"Inspect / review / PRs:",
|
|
6693
6693
|
"- get_diff \u2014 compact diff summary",
|
|
6694
|
-
|
|
6695
|
-
|
|
6694
|
+
"- get_pr_checks \u2014 snapshot of a worktree thread's PR checks (null = no PR). Use this to inspect status. If the user gave a goal, the worktree agent watches with `gh pr checks --watch` \u2014 do not poll for the human.",
|
|
6695
|
+
'- request_review \u2014 open a Review chat tab on a worktree thread (attaches .claude/skills/review/SKILL.md when present, else .context/review.md copied from .sideboard/review.md / stock; sends "Review changes in this workspace."); then wait_for_turn (loop while stillRunning) / get_turn_result on the returned id',
|
|
6696
|
+
"- ask_git \u2014 commit & push, open a draft PR, resolve conflicts, or merge. When the worktree is clean, Sideboard pushes / opens the PR itself. When dirty, it queues the worktree agent \u2014 then wait_for_turn (loop while stillRunning). Prefer this over paraphrasing. If ask_git / get_thread lastError says the GraphQL/PR body is too long, the branch is already pushed \u2014 send_to_thread so the worktree agent runs `gh pr create --body-file` with a short description. Do not invent SSH or auth failures from that error. If the user gave a goal (Greptile 5/5, CI green), send_to_thread that goal so the worktree agent enters the watch-fix-push loop \u2014 do not tell the human to poll.",
|
|
6696
6697
|
'- Merge (`ask_git` action=merge / send_to_thread "Merge PR.") only when the user explicitly asked to merge that PR. Do not merge because the work looks done, CI is green, or a typical flow includes it.',
|
|
6697
6698
|
'- Or send_to_thread with those exact phrases: "Commit and push.", "Commit, push, and open a draft PR.", "Merge the remote branch (main) into your branch and resolve conflicts. Then, commit and push your changes.", "Merge PR." (draft PRs: `gh pr create --draft -R <origin-owner/name>` using the workspace `github:` slug \u2014 never upstream). Never run git/gh from this orchestration cwd, and never merge the PR yourself.',
|
|
6698
6699
|
"Process guides:",
|
|
6699
6700
|
"- Long child jobs (pack, test, deploy, anything that may run more than ~30s): workers always have `/long-running` (Sideboard product skill). Tell them to detach and wait; do not ask the human to poll.",
|
|
6700
6701
|
"- Recurring multi-item / fan-out: if the child worktree has `.claude/skills/graph-engineering/SKILL.md`, tell the worker to follow it (`/graph-engineering`). Judge first; state on disk; grow the rulebook; do not patch three threads.",
|
|
6701
|
-
"- Recurring shapes: have the worktree agent write `.claude/skills/<kebab-name>/SKILL.md` (commit it) so later threads and native Claude Code / attach see it. Merge-review sentences go in `.claude/skills/review/SKILL.md` (
|
|
6702
|
-
"- One-offs: no guide. Same miss across threads: edit the skill or `.
|
|
6702
|
+
"- Recurring shapes: have the worktree agent write `.claude/skills/<kebab-name>/SKILL.md` (commit it) so later threads and native Claude Code / attach see it. Merge-review sentences go in `.claude/skills/review/SKILL.md` when that skill already exists; otherwise `.context/review.md` (do not create a review skill). Do not use `.sideboard/skills/` (that folder only). Codex/OpenCode: one line in AGENTS.md pointing at that file.",
|
|
6703
|
+
"- One-offs: no guide. Same miss across threads: edit the existing skill or `.context/review.md`, then rerun the batch \u2014 do not patch three threads.",
|
|
6703
6704
|
"Human-only (do not attempt): ready-for-review land (confirm_land), purge_thread.",
|
|
6704
6705
|
"Thread links in replies: when mentioning a chat/thread for the user, include a markdown link `[Title](sideboard://thread/<id>)` using the full id (or the link field from create_thread / list_threads). Sideboard renders these as clickable opens.",
|
|
6705
6706
|
"Bash / Read / etc: allowed for (1) inspecting target worktrees / registered repo paths from MCP, and (2) greenfield setup under ~/sideboard/repos (git clone, gh repo create, git init+remote). Never git init/clone *inside* this synthetic home cwd \u2014 emptiness here is expected, not a bug."
|
|
@@ -13280,7 +13281,7 @@ File: src/client/frontends/desktop/core/UserData.ts
|
|
|
13280
13281
|
|
|
13281
13282
|
## Growing the rules
|
|
13282
13283
|
|
|
13283
|
-
If a blocking issue is a missing or ambiguous repo rule that will recur, add one sentence to \`.claude/skills/review/SKILL.md\`
|
|
13284
|
+
If a blocking issue is a missing or ambiguous repo rule that will recur, add one sentence to \`.claude/skills/review/SKILL.md\` when that skill already exists. Otherwise write it to \`.context/review.md\` (do not create a review skill). Do not only patch this diff when the same miss will happen again. Do not write new skills under \`.sideboard/skills/\`.
|
|
13284
13285
|
`;
|
|
13285
13286
|
REVIEW_SKILL_PATH = ".claude/skills/review/SKILL.md";
|
|
13286
13287
|
REVIEW_SKILL_NAME = "review";
|
|
@@ -13334,41 +13335,64 @@ function skillGuidelines(content, source) {
|
|
|
13334
13335
|
source
|
|
13335
13336
|
};
|
|
13336
13337
|
}
|
|
13337
|
-
function
|
|
13338
|
-
|
|
13339
|
-
|
|
13340
|
-
|
|
13341
|
-
|
|
13342
|
-
|
|
13343
|
-
|
|
13344
|
-
|
|
13345
|
-
|
|
13338
|
+
function contextGuidelines(content, source) {
|
|
13339
|
+
return {
|
|
13340
|
+
path: CONTEXT_REVIEW_PATH,
|
|
13341
|
+
name: REPO_REVIEW_NAME,
|
|
13342
|
+
content,
|
|
13343
|
+
source
|
|
13344
|
+
};
|
|
13345
|
+
}
|
|
13346
|
+
function writeContextGuidelines(worktreePath, content) {
|
|
13347
|
+
const abs = (0, import_node_path32.join)(worktreePath, CONTEXT_REVIEW_PATH);
|
|
13346
13348
|
(0, import_node_fs32.mkdirSync)((0, import_node_path32.dirname)(abs), { recursive: true });
|
|
13347
|
-
|
|
13348
|
-
|
|
13349
|
+
const body = content.endsWith("\n") ? content : `${content}
|
|
13350
|
+
`;
|
|
13351
|
+
(0, import_node_fs32.writeFileSync)(abs, body, "utf8");
|
|
13352
|
+
return body;
|
|
13349
13353
|
}
|
|
13350
|
-
function
|
|
13354
|
+
function readSideboardReview(worktreePath, repoPath) {
|
|
13355
|
+
const fromWorktree = readTextIfPresent((0, import_node_path32.join)(worktreePath, REPO_REVIEW_PATH));
|
|
13356
|
+
if (fromWorktree) return fromWorktree;
|
|
13357
|
+
const repo = repoPath?.replace(/\/+$/, "");
|
|
13358
|
+
const wt = worktreePath.replace(/\/+$/, "");
|
|
13359
|
+
if (!repo || repo === wt) return null;
|
|
13360
|
+
return readTextIfPresent((0, import_node_path32.join)(repo, REPO_REVIEW_PATH));
|
|
13361
|
+
}
|
|
13362
|
+
function ensureReviewGuidelinesFile(worktreePath, repoPath) {
|
|
13351
13363
|
const skillContent = readTextIfPresent((0, import_node_path32.join)(worktreePath, REVIEW_SKILL_PATH));
|
|
13352
|
-
if (skillContent)
|
|
13353
|
-
|
|
13354
|
-
|
|
13355
|
-
|
|
13356
|
-
|
|
13357
|
-
|
|
13358
|
-
content: local.content,
|
|
13359
|
-
source: "local"
|
|
13360
|
-
};
|
|
13364
|
+
if (skillContent) {
|
|
13365
|
+
return { ...skillGuidelines(skillContent, "skill"), wrote: false };
|
|
13366
|
+
}
|
|
13367
|
+
const contextContent = readTextIfPresent((0, import_node_path32.join)(worktreePath, CONTEXT_REVIEW_PATH));
|
|
13368
|
+
if (contextContent && !shouldRefreshReviewRequestTemplate(contextContent)) {
|
|
13369
|
+
return { ...contextGuidelines(contextContent, "local"), wrote: false };
|
|
13361
13370
|
}
|
|
13362
|
-
const
|
|
13363
|
-
|
|
13371
|
+
const fromSideboard = readSideboardReview(worktreePath, repoPath);
|
|
13372
|
+
if (fromSideboard && !shouldRefreshReviewRequestTemplate(fromSideboard)) {
|
|
13373
|
+
const body2 = writeContextGuidelines(worktreePath, fromSideboard);
|
|
13374
|
+
return { ...contextGuidelines(body2, "repo"), wrote: true };
|
|
13375
|
+
}
|
|
13376
|
+
const local = readLocalGuidelines(worktreePath);
|
|
13377
|
+
const body = writeContextGuidelines(worktreePath, local?.content ?? REVIEW_REQUEST_TEMPLATE);
|
|
13378
|
+
return {
|
|
13379
|
+
...contextGuidelines(body, local ? "local" : "stock"),
|
|
13380
|
+
wrote: true
|
|
13381
|
+
};
|
|
13382
|
+
}
|
|
13383
|
+
function ensureReviewSkillFile(worktreePath, repoPath) {
|
|
13384
|
+
const g = ensureReviewGuidelinesFile(worktreePath, repoPath);
|
|
13385
|
+
return { path: g.path, content: g.content, wrote: g.wrote };
|
|
13364
13386
|
}
|
|
13365
|
-
function
|
|
13366
|
-
|
|
13367
|
-
|
|
13387
|
+
function resolveReviewGuidelines(worktreePath, repoPath) {
|
|
13388
|
+
return ensureReviewGuidelinesFile(worktreePath, repoPath);
|
|
13389
|
+
}
|
|
13390
|
+
function ensureReviewRequestFile(worktreePath, repoPath) {
|
|
13391
|
+
return ensureReviewGuidelinesFile(worktreePath, repoPath);
|
|
13368
13392
|
}
|
|
13369
13393
|
function buildReviewRequestAttachment(content, opts) {
|
|
13370
13394
|
const path2 = opts?.path ?? REVIEW_SKILL_PATH;
|
|
13371
|
-
const name = opts?.name ?? (path2 === REVIEW_SKILL_PATH ? REVIEW_SKILL_NAME : path2 === REPO_REVIEW_PATH ? REPO_REVIEW_NAME : REVIEW_REQUEST_NAME);
|
|
13395
|
+
const name = opts?.name ?? (path2 === REVIEW_SKILL_PATH ? REVIEW_SKILL_NAME : path2 === REPO_REVIEW_PATH || path2 === CONTEXT_REVIEW_PATH ? REPO_REVIEW_NAME : REVIEW_REQUEST_NAME);
|
|
13372
13396
|
return {
|
|
13373
13397
|
id: (0, import_node_crypto8.randomUUID)(),
|
|
13374
13398
|
name,
|
|
@@ -13378,7 +13402,7 @@ function buildReviewRequestAttachment(content, opts) {
|
|
|
13378
13402
|
};
|
|
13379
13403
|
}
|
|
13380
13404
|
function readExistingReviewRequestFile(worktreePath) {
|
|
13381
|
-
return readTextIfPresent((0, import_node_path32.join)(worktreePath, REVIEW_SKILL_PATH)) ?? readTextIfPresent((0, import_node_path32.join)(worktreePath, REPO_REVIEW_PATH)) ?? readTextIfPresent((0, import_node_path32.join)(worktreePath, REVIEW_REQUEST_PATH)) ?? readTextIfPresent((0, import_node_path32.join)(worktreePath, LEGACY_REVIEW_REQUEST_PATH));
|
|
13405
|
+
return readTextIfPresent((0, import_node_path32.join)(worktreePath, REVIEW_SKILL_PATH)) ?? readTextIfPresent((0, import_node_path32.join)(worktreePath, CONTEXT_REVIEW_PATH)) ?? readTextIfPresent((0, import_node_path32.join)(worktreePath, REPO_REVIEW_PATH)) ?? readTextIfPresent((0, import_node_path32.join)(worktreePath, REVIEW_REQUEST_PATH)) ?? readTextIfPresent((0, import_node_path32.join)(worktreePath, LEGACY_REVIEW_REQUEST_PATH));
|
|
13382
13406
|
}
|
|
13383
13407
|
async function requestReview(threadRef, send2) {
|
|
13384
13408
|
const from = findThreadByRef(threadRef);
|
|
@@ -13391,7 +13415,7 @@ async function requestReview(threadRef, send2) {
|
|
|
13391
13415
|
if (from.status === "archived") {
|
|
13392
13416
|
throw new Error(`Thread is archived: ${from.id}`);
|
|
13393
13417
|
}
|
|
13394
|
-
const guidelines = resolveReviewGuidelines(from.worktreePath);
|
|
13418
|
+
const guidelines = resolveReviewGuidelines(from.worktreePath, from.repoPath);
|
|
13395
13419
|
const tab = createChatTab({
|
|
13396
13420
|
fromThreadId: from.id,
|
|
13397
13421
|
title: "Review",
|
|
@@ -13405,7 +13429,7 @@ async function requestReview(threadRef, send2) {
|
|
|
13405
13429
|
const started = await send2(tab.id, REVIEW_REQUEST_PREFILL);
|
|
13406
13430
|
return { tab: started, from };
|
|
13407
13431
|
}
|
|
13408
|
-
var import_node_crypto8, import_node_fs32, import_node_path32, REPO_REVIEW_PATH, REPO_REVIEW_NAME, REVIEW_REQUEST_PATH, LEGACY_REVIEW_REQUEST_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PREFILL, LEGACY_REVIEW_TEMPLATE_MARKERS;
|
|
13432
|
+
var import_node_crypto8, import_node_fs32, import_node_path32, REPO_REVIEW_PATH, REPO_REVIEW_NAME, CONTEXT_REVIEW_PATH, REVIEW_REQUEST_PATH, LEGACY_REVIEW_REQUEST_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PREFILL, LEGACY_REVIEW_TEMPLATE_MARKERS;
|
|
13409
13433
|
var init_request_review = __esm({
|
|
13410
13434
|
"src/review/request-review.ts"() {
|
|
13411
13435
|
"use strict";
|
|
@@ -13419,6 +13443,7 @@ var init_request_review = __esm({
|
|
|
13419
13443
|
init_workspace_scratch();
|
|
13420
13444
|
REPO_REVIEW_PATH = ".sideboard/review.md";
|
|
13421
13445
|
REPO_REVIEW_NAME = "review.md";
|
|
13446
|
+
CONTEXT_REVIEW_PATH = ".context/review.md";
|
|
13422
13447
|
REVIEW_REQUEST_PATH = `${ATTACHMENTS_DIR}/Review request.md`;
|
|
13423
13448
|
LEGACY_REVIEW_REQUEST_PATH = `${LEGACY_ATTACHMENTS_DIR}/Review request.md`;
|
|
13424
13449
|
REVIEW_REQUEST_NAME = "Review request.md";
|
|
@@ -13672,11 +13697,9 @@ async function runConventionSetup(repoPath, worktreePath, onLine, opts) {
|
|
|
13672
13697
|
}
|
|
13673
13698
|
async function runWorkspaceSetup(repoPath, worktreePath, onLine, opts) {
|
|
13674
13699
|
await ensureWorktreeSideboardIgnored(worktreePath);
|
|
13675
|
-
const
|
|
13676
|
-
if (
|
|
13677
|
-
onLine?.(
|
|
13678
|
-
`[setup] wrote ${REVIEW_SKILL_PATH} \u2014 commit it so later worktrees inherit Review guidelines`
|
|
13679
|
-
);
|
|
13700
|
+
const review = ensureReviewGuidelinesFile(worktreePath, repoPath);
|
|
13701
|
+
if (review.wrote) {
|
|
13702
|
+
onLine?.(`[setup] wrote ${review.path} \u2014 local Review guidelines`);
|
|
13680
13703
|
}
|
|
13681
13704
|
let setup = await runSetupScript(repoPath, worktreePath, onLine, opts);
|
|
13682
13705
|
if (!setup.ran) {
|
|
@@ -17254,6 +17277,16 @@ node <detached-job.js> wait --pid-file FILE --log-file FILE [--ok-pattern TEXT]
|
|
|
17254
17277
|
4. On \`ok\`, present once more (\`status=ok\`, last \`delta\`) and finish the task. On \`failed\`, fix from the log.
|
|
17255
17278
|
|
|
17256
17279
|
Never tell the user \u201Csay status when it\u2019s done.\u201D You wait.
|
|
17280
|
+
|
|
17281
|
+
## PR checks (only if a goal is given)
|
|
17282
|
+
|
|
17283
|
+
Do **not** watch after every push. If the user gave a goal (Greptile 5/5, CI green, until checks pass), wait the same way:
|
|
17284
|
+
|
|
17285
|
+
\`\`\`bash
|
|
17286
|
+
node <detached-job.js> start pr-checks -- gh pr checks --watch
|
|
17287
|
+
\`\`\`
|
|
17288
|
+
|
|
17289
|
+
On miss, fix, commit, push, and watch again until the goal is met or you are blocked. Do not ask the human to poll. Do not merge unless asked.
|
|
17257
17290
|
`;
|
|
17258
17291
|
}
|
|
17259
17292
|
});
|
|
@@ -17643,7 +17676,7 @@ function formatWorktreeDirective(thread, opts) {
|
|
|
17643
17676
|
"Short git requests from the Sideboard UI are complete instructions \u2014 expand them using the rules above without asking for clarification:"
|
|
17644
17677
|
);
|
|
17645
17678
|
lines.push(
|
|
17646
|
-
'- "Commit and push." \u2192 commit any uncommitted work with a purpose-stating message, then push to origin (updates an existing PR if one is linked).'
|
|
17679
|
+
'- "Commit and push." \u2192 commit any uncommitted work with a purpose-stating message, then push to origin (updates an existing PR if one is linked). Do not start a checks loop unless they gave a goal.'
|
|
17647
17680
|
);
|
|
17648
17681
|
lines.push(
|
|
17649
17682
|
'- "Commit, push, and open a draft PR." \u2192 commit, push, then create a draft PR with `gh pr create --draft -R \u2026` (title/body from the change purpose).'
|
|
@@ -17652,7 +17685,7 @@ function formatWorktreeDirective(thread, opts) {
|
|
|
17652
17685
|
'- "Commit, push, and open a PR in the browser." \u2192 commit, push, then `gh pr create --web -R \u2026`.'
|
|
17653
17686
|
);
|
|
17654
17687
|
lines.push(
|
|
17655
|
-
'- "Fix CI: <name>." \u2192 investigate that failing check, fix it, commit, and push.'
|
|
17688
|
+
'- "Fix CI: <name>." \u2192 investigate that failing check, fix it, commit, and push. Loop only if they gave a goal to keep going until it passes.'
|
|
17656
17689
|
);
|
|
17657
17690
|
lines.push(
|
|
17658
17691
|
'- "Merge the remote branch (<base>) into your branch and resolve conflicts. Then, commit and push your changes." \u2192 fetch the PR base, merge it into this branch, resolve conflicts carefully, commit, and push until the PR is mergeable.'
|
|
@@ -17664,11 +17697,21 @@ function formatWorktreeDirective(thread, opts) {
|
|
|
17664
17697
|
'- "Merge PR." \u2192 merge this thread\'s open pull request on GitHub (this phrase is the explicit ask). If `gh stack view` shows a stack, use `gh stack merge`; otherwise `gh pr merge` (respect repo defaults / squash vs merge). Do not force-push main/master or merge locally into the main checkout.'
|
|
17665
17698
|
);
|
|
17666
17699
|
lines.push("");
|
|
17700
|
+
lines.push(formatPrGateDirective());
|
|
17701
|
+
lines.push("");
|
|
17667
17702
|
lines.push(formatProcessGuideDirective());
|
|
17668
17703
|
return lines.join("\n");
|
|
17669
17704
|
}
|
|
17670
17705
|
function formatWorktreeReminder() {
|
|
17671
|
-
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.";
|
|
17706
|
+
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.";
|
|
17707
|
+
}
|
|
17708
|
+
function formatPrGateDirective() {
|
|
17709
|
+
return [
|
|
17710
|
+
"If a goal is given (not after every push):",
|
|
17711
|
+
"- Enter a watch-fix-push loop and stay in it until that goal is met or you are blocked (examples: \u201CGreptile 5/5\u201D, \u201CCI green\u201D, \u201Cuntil checks pass\u201D). Do not stop after one red run or one review cycle.",
|
|
17712
|
+
"- Wait with `/long-running`: `gh pr checks --watch` (add `-R <origin>` when needed). Present the log. Do not ask the human to poll.",
|
|
17713
|
+
"- Greptile 5/5: wait for the greptile check; read the latest `N/5` from the PR body or Greptile\u2019s most recently *updated* issue comment; also fetch unresolved review comments / the \u201CPrompt to fix all with AI\u201D block. Done = **5/5 and zero unresolved Greptile comments**. If Greptile is idle, comment `@greptile review`. Cap about 5 iterations, then report leftovers. Do not merge unless asked."
|
|
17714
|
+
].join("\n");
|
|
17672
17715
|
}
|
|
17673
17716
|
function formatProcessGuideDirective() {
|
|
17674
17717
|
return [
|
|
@@ -17676,7 +17719,7 @@ function formatProcessGuideDirective() {
|
|
|
17676
17719
|
"- Long jobs (pack, test, deploy, anything that may run more than ~30s): Sideboard always provides `/long-running`. Detach and wait \u2014 do not ask the human to poll.",
|
|
17677
17720
|
"- If `.claude/skills/graph-engineering/SKILL.md` exists, follow it (`/graph-engineering`) for migrations, ports, batch fixes, and other fan-out. Judge first; state on disk; grow the rulebook; do not patch around it.",
|
|
17678
17721
|
"- If this same shape of work will happen again, write `.claude/skills/<kebab-name>/SKILL.md` in this worktree (Claude Code project skill). Sideboard `/name`, Claude Code, and `attach` all load that path. Do not leave the method only in chat.",
|
|
17679
|
-
"- Merge-readiness notes:
|
|
17722
|
+
"- Merge-readiness notes: if `.claude/skills/review/SKILL.md` already exists, edit it. Otherwise write them to `.context/review.md` (copied from `.sideboard/review.md` when that file exists). Do not create a review skill.",
|
|
17680
17723
|
"- Do not write new skills under `.sideboard/skills/` (that folder only \u2014 other `.sideboard/` files such as settings.toml are fine). Point Codex/OpenCode at the Claude skill from `AGENTS.md`. Optional: symlink `.cursor/skills/<name>` to the Claude skill.",
|
|
17681
17724
|
"- Skip a guide for a one-off. If a matching skill exists, follow it. Same miss twice \u2192 edit the skill, do not patch around it."
|
|
17682
17725
|
].join("\n");
|
|
@@ -20609,6 +20652,7 @@ __export(index_exports, {
|
|
|
20609
20652
|
CONTEXT_KEEP_RECENT_CHARS: () => CONTEXT_KEEP_RECENT_CHARS,
|
|
20610
20653
|
CONTEXT_KEEP_RECENT_MESSAGES: () => CONTEXT_KEEP_RECENT_MESSAGES,
|
|
20611
20654
|
CONTEXT_MIN_MESSAGES: () => CONTEXT_MIN_MESSAGES,
|
|
20655
|
+
CONTEXT_REVIEW_PATH: () => CONTEXT_REVIEW_PATH,
|
|
20612
20656
|
CONVENTION_SETUP_RELPATHS: () => CONVENTION_SETUP_RELPATHS,
|
|
20613
20657
|
COORDINATOR_TOOL_PLAYBOOK: () => COORDINATOR_TOOL_PLAYBOOK,
|
|
20614
20658
|
DEFAULT_ABLETIME_HOST: () => DEFAULT_ABLETIME_HOST,
|
|
@@ -20815,6 +20859,7 @@ __export(index_exports, {
|
|
|
20815
20859
|
ensureConnectedBrightsyTeamTokens: () => ensureConnectedBrightsyTeamTokens,
|
|
20816
20860
|
ensureGhPreferOrigin: () => ensureGhPreferOrigin,
|
|
20817
20861
|
ensureGlobalCoordinatorCwd: () => ensureGlobalCoordinatorCwd,
|
|
20862
|
+
ensureReviewGuidelinesFile: () => ensureReviewGuidelinesFile,
|
|
20818
20863
|
ensureReviewRequestFile: () => ensureReviewRequestFile,
|
|
20819
20864
|
ensureReviewSkillFile: () => ensureReviewSkillFile,
|
|
20820
20865
|
ensureSlackCoordinator: () => ensureSlackCoordinator,
|
|
@@ -20864,6 +20909,7 @@ __export(index_exports, {
|
|
|
20864
20909
|
formatOptionalServicesReminder: () => formatOptionalServicesReminder,
|
|
20865
20910
|
formatPlanQuestionAnswers: () => formatPlanQuestionAnswers,
|
|
20866
20911
|
formatPlanQuestionsForChat: () => formatPlanQuestionsForChat,
|
|
20912
|
+
formatPrGateDirective: () => formatPrGateDirective,
|
|
20867
20913
|
formatProcessGuideDirective: () => formatProcessGuideDirective,
|
|
20868
20914
|
formatRateLimitResetHint: () => formatRateLimitResetHint,
|
|
20869
20915
|
formatRenameBranchDirective: () => formatRenameBranchDirective,
|
|
@@ -24767,9 +24813,25 @@ async function startMcpServer() {
|
|
|
24767
24813
|
};
|
|
24768
24814
|
}
|
|
24769
24815
|
);
|
|
24816
|
+
server.tool(
|
|
24817
|
+
"get_pr_checks",
|
|
24818
|
+
"Snapshot of GitHub PR checks for a worktree thread (`gh pr checks` plus merge/review gates). null = no PR. If the user gave a goal (Greptile 5/5, CI green), the worktree agent watches with `gh pr checks --watch` via /long-running \u2014 this tool is a snapshot, not a waiter. Coordinators: do not run gh from the orchestration cwd.",
|
|
24819
|
+
{ ref: import_zod5.z.string().describe("Worktree thread id/ref") },
|
|
24820
|
+
async ({ ref }) => {
|
|
24821
|
+
try {
|
|
24822
|
+
const checks = await orch.getPrChecks(ref);
|
|
24823
|
+
return {
|
|
24824
|
+
content: [{ type: "text", text: JSON.stringify(checks) }]
|
|
24825
|
+
};
|
|
24826
|
+
} catch (err) {
|
|
24827
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
24828
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
24829
|
+
}
|
|
24830
|
+
}
|
|
24831
|
+
);
|
|
24770
24832
|
server.tool(
|
|
24771
24833
|
"request_review",
|
|
24772
|
-
'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
|
|
24834
|
+
'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 copies .sideboard/review.md into .context/review.md, or seeds that file from 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.',
|
|
24773
24835
|
{ ref: import_zod5.z.string().describe("Worktree thread id/ref to review") },
|
|
24774
24836
|
async ({ ref }) => {
|
|
24775
24837
|
try {
|
|
@@ -24797,7 +24859,7 @@ async function startMcpServer() {
|
|
|
24797
24859
|
);
|
|
24798
24860
|
server.tool(
|
|
24799
24861
|
"ask_git",
|
|
24800
|
-
"Commit & push, open a draft PR, resolve conflicts, or merge \u2014 same actions as the desktop git buttons. When the worktree is clean, Sideboard pushes / opens the PR itself (HTTPS via `gh` even when origin is SSH / Settings \u2192 Git is SSH). When dirty, queues the worktree agent to commit; then wait_for_turn (loop while stillRunning). Pass a worktree thread ref (not the orchestrator). action=merge only when the user explicitly asked to merge that PR. Do not run git or gh from the orchestration cwd. If this tool errors that the GraphQL/PR body is too long, the branch is already pushed \u2014 have the worktree agent retry `gh pr create --body-file` with a short description (GitHub limit 65,536 characters). Do not invent SSH/auth failures from that error.",
|
|
24862
|
+
"Commit & push, open a draft PR, resolve conflicts, or merge \u2014 same actions as the desktop git buttons. When the worktree is clean, Sideboard pushes / opens the PR itself (HTTPS via `gh` even when origin is SSH / Settings \u2192 Git is SSH). When dirty, queues the worktree agent to commit; then wait_for_turn (loop while stillRunning). Do not start a checks loop on a plain push \u2014 only if the user gave a goal (Greptile 5/5, CI green). Pass a worktree thread ref (not the orchestrator). action=merge only when the user explicitly asked to merge that PR. Do not run git or gh from the orchestration cwd. If this tool errors that the GraphQL/PR body is too long, the branch is already pushed \u2014 have the worktree agent retry `gh pr create --body-file` with a short description (GitHub limit 65,536 characters). Do not invent SSH/auth failures from that error.",
|
|
24801
24863
|
{
|
|
24802
24864
|
ref: import_zod5.z.string().describe("Worktree thread id/ref"),
|
|
24803
24865
|
action: import_zod5.z.enum(AGENT_GIT_ACTIONS).describe(
|
|
@@ -27607,6 +27669,7 @@ init_outbound_watch();
|
|
|
27607
27669
|
CONTEXT_KEEP_RECENT_CHARS,
|
|
27608
27670
|
CONTEXT_KEEP_RECENT_MESSAGES,
|
|
27609
27671
|
CONTEXT_MIN_MESSAGES,
|
|
27672
|
+
CONTEXT_REVIEW_PATH,
|
|
27610
27673
|
CONVENTION_SETUP_RELPATHS,
|
|
27611
27674
|
COORDINATOR_TOOL_PLAYBOOK,
|
|
27612
27675
|
DEFAULT_ABLETIME_HOST,
|
|
@@ -27813,6 +27876,7 @@ init_outbound_watch();
|
|
|
27813
27876
|
ensureConnectedBrightsyTeamTokens,
|
|
27814
27877
|
ensureGhPreferOrigin,
|
|
27815
27878
|
ensureGlobalCoordinatorCwd,
|
|
27879
|
+
ensureReviewGuidelinesFile,
|
|
27816
27880
|
ensureReviewRequestFile,
|
|
27817
27881
|
ensureReviewSkillFile,
|
|
27818
27882
|
ensureSlackCoordinator,
|
|
@@ -27862,6 +27926,7 @@ init_outbound_watch();
|
|
|
27862
27926
|
formatOptionalServicesReminder,
|
|
27863
27927
|
formatPlanQuestionAnswers,
|
|
27864
27928
|
formatPlanQuestionsForChat,
|
|
27929
|
+
formatPrGateDirective,
|
|
27865
27930
|
formatProcessGuideDirective,
|
|
27866
27931
|
formatRateLimitResetHint,
|
|
27867
27932
|
formatRenameBranchDirective,
|
package/dist/index.d.cts
CHANGED
|
@@ -2843,6 +2843,10 @@ declare function formatWorktreeDirective(thread: Pick<Thread, 'worktreePath' | '
|
|
|
2843
2843
|
}): string;
|
|
2844
2844
|
/** Short isolation line on every worktree turn (survives CLI resume). */
|
|
2845
2845
|
declare function formatWorktreeReminder(): string;
|
|
2846
|
+
/**
|
|
2847
|
+
* Watch-fix-push loop only when the user gives a goal (not after every push).
|
|
2848
|
+
*/
|
|
2849
|
+
declare function formatPrGateDirective(): string;
|
|
2846
2850
|
/**
|
|
2847
2851
|
* Recurring-process guides: write Claude Code project skills so native CLIs
|
|
2848
2852
|
* (`attach`, `claude` in the checkout) see them without Sideboard.
|
|
@@ -3008,8 +3012,9 @@ declare function runConventionSetup(repoPath: string, worktreePath: string, onLi
|
|
|
3008
3012
|
defaultBranch?: string;
|
|
3009
3013
|
}): Promise<SetupRunResult>;
|
|
3010
3014
|
/**
|
|
3011
|
-
* Setup for a new worktree.
|
|
3012
|
-
*
|
|
3015
|
+
* Setup for a new worktree. When no Claude review skill exists, copies
|
|
3016
|
+
* `.sideboard/review.md` into `.context/review.md`, then `[scripts] setup`,
|
|
3017
|
+
* Cursor `.cursor/worktrees.json`, then `script/setup`.
|
|
3013
3018
|
*/
|
|
3014
3019
|
declare function runWorkspaceSetup(repoPath: string, worktreePath: string, onLine?: (line: string) => void, opts?: {
|
|
3015
3020
|
signal?: AbortSignal;
|
|
@@ -4042,19 +4047,21 @@ declare function startOrchestration(opts: {
|
|
|
4042
4047
|
}): Promise<Thread>;
|
|
4043
4048
|
|
|
4044
4049
|
/** Default Review request.md body (Conductor-style). Kept in sync with desktop review-request.ts. */
|
|
4045
|
-
declare const REVIEW_REQUEST_TEMPLATE = "# Review guidelines:\n\nYou are reviewing a proposed code change so a human can decide whether it is **ready to merge / land**. Findings matter, but the primary deliverable is a clear readiness recommendation \u2014 not a laundry list of style notes.\n\n## Required outcome\n\nStart your reply with a **Recommendation** section using exactly one of:\n\n- **Approve** \u2014 ready to merge as-is (or with only trivial nits the author can ignore).\n- **Approve with nits** \u2014 ready to merge; list only optional polish that should not block.\n- **Request changes** \u2014 not ready; blocking issues must be fixed first.\n- **Needs more information** \u2014 cannot judge readiness yet (missing context, incomplete diff, unclear intent).\n\nIn 1\u20133 sentences, say **why** \u2014 grounded in correctness, risk, test coverage, and scope \u2014 not vibes. If you request changes, name the blockers explicitly.\n\nPeople running this review are asking \u201Ccan we ship this?\u201D Treat that as the question you answer first.\n\n## Findings\n\nBelow are guidelines for determining whether an issue is worth flagging to the original author.\n\nThese are not the final word. More specific guidelines elsewhere (developer message, user message, a file, etc.) override these.\n\nFlag something as a bug / blocking finding only when:\n\n1. It meaningfully impacts the accuracy, performance, security, or maintainability of the code.\n2. The bug is discrete and actionable (not a vague codebase-wide complaint or a bundle of unrelated issues).\n3. Fixing it does not demand rigor absent from the rest of the codebase.\n4. The issue was introduced by this change (do not flag pre-existing bugs unless they are newly exposed by this PR).\n5. The author would likely fix it if made aware.\n6. It does not rely on unstated assumptions about the codebase or author intent.\n7. Speculative breakage is not enough \u2014 identify the other code that is provably affected.\n8. It is clearly not just an intentional change by the author.\n\nWhen flagging an issue, include a short accompanying comment:\n\n1. Clear about why it is a problem.\n2. Severity must match reality \u2014 do not inflate.\n3. Brief: at most one paragraph; avoid unnecessary line breaks in prose.\n4. No code chunks longer than 3 lines; wrap code in inline ticks or a fenced block.\n5. Call out scenarios / environments / inputs needed to hit the bug when severity depends on them.\n6. Matter-of-fact tone \u2014 helpful assistant, not accusatory or effusive.\n7. Skimmable on first read.\n8. No empty flattery (\u201CGreat job\u2026\u201D, \u201CThanks for\u2026\u201D).\n\nHOW MANY FINDINGS TO RETURN:\n\nList every finding the author would fix if they knew about it. If nothing qualifies, say so and still give the Recommendation. Do not stop at the first finding.\n\nGUIDELINES:\n\n- Ignore trivial style unless it obscures meaning or violates documented standards.\n- One comment per distinct issue (or a short multi-line range if needed).\n- Use ```suggestion blocks ONLY for concrete replacement code (minimal lines; no commentary inside the block).\n- In every ```suggestion block, preserve the exact leading whitespace of the replaced lines (spaces vs tabs, number of spaces).\n- Do NOT introduce or remove outer indentation levels unless that is the actual fix.\n- Separate **blocking** findings from **nits**. Only blocking findings should drive Request changes.\n\nThe report appears in chat (and can become Sideboard diff comments). Avoid unnecessary location chatter in the body; keep line ranges as short as possible (prefer \u22645\u201310 lines).\n\n## Getting the diff\n\nUse Sideboard's diff for this thread's worktree. Prefer the `get_diff` MCP tool (pass this thread's ref) for a compact summary, then read specific files with Read/Glob as needed. In the Sideboard desktop app, the Changes panel shows the same worktree diff.\n\nIf the user asks you to address or read line comments they added in the Changes / file diff UI, those arrive as `diff-comment` attachments on the next turn \u2014 follow them precisely.\n\n## Fallback: if you don't have access to the Sideboard diff tool\n\nIf you don't have access to `get_diff`, use the following git commands to get the diff:\n\n```bash\n# Get the merge base between this branch and the target\nMERGE_BASE=$(git merge-base origin/main HEAD)\n\n# Get the committed diff against the merge base\ngit diff $MERGE_BASE HEAD\n\n# Get any uncommitted changes (staged and unstaged)\ngit diff HEAD\n```\n\nReview the combination of both outputs: the first shows all committed changes on this branch relative to the target, and the second shows any uncommitted work in progress.\n\nNo need to mention in your report whether or not you used one of the fallback strategies; it's usually irrelevant.\n\n## Output format\n\n**1. Recommendation first** (required), then **2. Findings** (may be empty).\n\nOnly report ONE finding per unique issue.\n\n<example>\n## Recommendation\n\n**Request changes** \u2014 The empty-input crash on load will break first-run users; fix that before merge. The unused helper is a nit and can wait.\n\n## Findings\n\n### **#1 Empty input causes crash** (blocking)\n\nIf the input field is empty when the page loads, the app will crash.\n\nFile: src/client/frontends/desktop/ui/Input.tsx\n\n### **#2 Dead code** (nit)\n\nThe getUserData function is now unused. It should be deleted.\n\nFile: src/client/frontends/desktop/core/UserData.ts\n</example>\n\n<example>\n## Recommendation\n\n**Approve** \u2014 Diff is scoped, behavior looks correct, and there are no blocking issues. Safe to merge.\n</example>\n\n## Growing the rules\n\nIf a blocking issue is a missing or ambiguous repo rule that will recur, add one sentence to `.claude/skills/review/SKILL.md`
|
|
4050
|
+
declare const REVIEW_REQUEST_TEMPLATE = "# Review guidelines:\n\nYou are reviewing a proposed code change so a human can decide whether it is **ready to merge / land**. Findings matter, but the primary deliverable is a clear readiness recommendation \u2014 not a laundry list of style notes.\n\n## Required outcome\n\nStart your reply with a **Recommendation** section using exactly one of:\n\n- **Approve** \u2014 ready to merge as-is (or with only trivial nits the author can ignore).\n- **Approve with nits** \u2014 ready to merge; list only optional polish that should not block.\n- **Request changes** \u2014 not ready; blocking issues must be fixed first.\n- **Needs more information** \u2014 cannot judge readiness yet (missing context, incomplete diff, unclear intent).\n\nIn 1\u20133 sentences, say **why** \u2014 grounded in correctness, risk, test coverage, and scope \u2014 not vibes. If you request changes, name the blockers explicitly.\n\nPeople running this review are asking \u201Ccan we ship this?\u201D Treat that as the question you answer first.\n\n## Findings\n\nBelow are guidelines for determining whether an issue is worth flagging to the original author.\n\nThese are not the final word. More specific guidelines elsewhere (developer message, user message, a file, etc.) override these.\n\nFlag something as a bug / blocking finding only when:\n\n1. It meaningfully impacts the accuracy, performance, security, or maintainability of the code.\n2. The bug is discrete and actionable (not a vague codebase-wide complaint or a bundle of unrelated issues).\n3. Fixing it does not demand rigor absent from the rest of the codebase.\n4. The issue was introduced by this change (do not flag pre-existing bugs unless they are newly exposed by this PR).\n5. The author would likely fix it if made aware.\n6. It does not rely on unstated assumptions about the codebase or author intent.\n7. Speculative breakage is not enough \u2014 identify the other code that is provably affected.\n8. It is clearly not just an intentional change by the author.\n\nWhen flagging an issue, include a short accompanying comment:\n\n1. Clear about why it is a problem.\n2. Severity must match reality \u2014 do not inflate.\n3. Brief: at most one paragraph; avoid unnecessary line breaks in prose.\n4. No code chunks longer than 3 lines; wrap code in inline ticks or a fenced block.\n5. Call out scenarios / environments / inputs needed to hit the bug when severity depends on them.\n6. Matter-of-fact tone \u2014 helpful assistant, not accusatory or effusive.\n7. Skimmable on first read.\n8. No empty flattery (\u201CGreat job\u2026\u201D, \u201CThanks for\u2026\u201D).\n\nHOW MANY FINDINGS TO RETURN:\n\nList every finding the author would fix if they knew about it. If nothing qualifies, say so and still give the Recommendation. Do not stop at the first finding.\n\nGUIDELINES:\n\n- Ignore trivial style unless it obscures meaning or violates documented standards.\n- One comment per distinct issue (or a short multi-line range if needed).\n- Use ```suggestion blocks ONLY for concrete replacement code (minimal lines; no commentary inside the block).\n- In every ```suggestion block, preserve the exact leading whitespace of the replaced lines (spaces vs tabs, number of spaces).\n- Do NOT introduce or remove outer indentation levels unless that is the actual fix.\n- Separate **blocking** findings from **nits**. Only blocking findings should drive Request changes.\n\nThe report appears in chat (and can become Sideboard diff comments). Avoid unnecessary location chatter in the body; keep line ranges as short as possible (prefer \u22645\u201310 lines).\n\n## Getting the diff\n\nUse Sideboard's diff for this thread's worktree. Prefer the `get_diff` MCP tool (pass this thread's ref) for a compact summary, then read specific files with Read/Glob as needed. In the Sideboard desktop app, the Changes panel shows the same worktree diff.\n\nIf the user asks you to address or read line comments they added in the Changes / file diff UI, those arrive as `diff-comment` attachments on the next turn \u2014 follow them precisely.\n\n## Fallback: if you don't have access to the Sideboard diff tool\n\nIf you don't have access to `get_diff`, use the following git commands to get the diff:\n\n```bash\n# Get the merge base between this branch and the target\nMERGE_BASE=$(git merge-base origin/main HEAD)\n\n# Get the committed diff against the merge base\ngit diff $MERGE_BASE HEAD\n\n# Get any uncommitted changes (staged and unstaged)\ngit diff HEAD\n```\n\nReview the combination of both outputs: the first shows all committed changes on this branch relative to the target, and the second shows any uncommitted work in progress.\n\nNo need to mention in your report whether or not you used one of the fallback strategies; it's usually irrelevant.\n\n## Output format\n\n**1. Recommendation first** (required), then **2. Findings** (may be empty).\n\nOnly report ONE finding per unique issue.\n\n<example>\n## Recommendation\n\n**Request changes** \u2014 The empty-input crash on load will break first-run users; fix that before merge. The unused helper is a nit and can wait.\n\n## Findings\n\n### **#1 Empty input causes crash** (blocking)\n\nIf the input field is empty when the page loads, the app will crash.\n\nFile: src/client/frontends/desktop/ui/Input.tsx\n\n### **#2 Dead code** (nit)\n\nThe getUserData function is now unused. It should be deleted.\n\nFile: src/client/frontends/desktop/core/UserData.ts\n</example>\n\n<example>\n## Recommendation\n\n**Approve** \u2014 Diff is scoped, behavior looks correct, and there are no blocking issues. Safe to merge.\n</example>\n\n## Growing the rules\n\nIf a blocking issue is a missing or ambiguous repo rule that will recur, add one sentence to `.claude/skills/review/SKILL.md` when that skill already exists. Otherwise write it to `.context/review.md` (do not create a review skill). Do not only patch this diff when the same miss will happen again. Do not write new skills under `.sideboard/skills/`.\n";
|
|
4046
4051
|
/** Committed Claude Code project skill — Review attaches this when present. */
|
|
4047
4052
|
declare const REVIEW_SKILL_PATH = ".claude/skills/review/SKILL.md";
|
|
4048
4053
|
declare const REVIEW_SKILL_NAME = "review";
|
|
4049
4054
|
/** Wrap guidelines as a Claude Code skill. Leaves existing frontmatter intact. */
|
|
4050
4055
|
declare function wrapReviewSkillMarkdown(body: string): string;
|
|
4051
4056
|
|
|
4052
|
-
/**
|
|
4057
|
+
/** Repo-level source copied into the worktree `.context` when no review skill exists. */
|
|
4053
4058
|
declare const REPO_REVIEW_PATH = ".sideboard/review.md";
|
|
4054
4059
|
declare const REPO_REVIEW_NAME = "review.md";
|
|
4060
|
+
/** Worktree working copy (gitignored). Review attaches this when there is no skill. */
|
|
4061
|
+
declare const CONTEXT_REVIEW_PATH = ".context/review.md";
|
|
4055
4062
|
/**
|
|
4056
|
-
*
|
|
4057
|
-
*
|
|
4063
|
+
* Leftover local scratch from an older fallback. Still read; new writes go to
|
|
4064
|
+
* {@link CONTEXT_REVIEW_PATH}.
|
|
4058
4065
|
*/
|
|
4059
4066
|
declare const REVIEW_REQUEST_PATH = ".context/attachments/Review request.md";
|
|
4060
4067
|
declare const LEGACY_REVIEW_REQUEST_PATH = ".sideboard/attachments/Review request.md";
|
|
@@ -4073,29 +4080,36 @@ interface ResolvedReviewGuidelines {
|
|
|
4073
4080
|
* findings-only stock template. Preserve real user customizations.
|
|
4074
4081
|
*/
|
|
4075
4082
|
declare function shouldRefreshReviewRequestTemplate(content: string): boolean;
|
|
4083
|
+
interface EnsuredReviewGuidelines extends ResolvedReviewGuidelines {
|
|
4084
|
+
wrote: boolean;
|
|
4085
|
+
}
|
|
4086
|
+
/**
|
|
4087
|
+
* Prefer an existing `.claude/skills/review/SKILL.md`. Otherwise copy
|
|
4088
|
+
* `.sideboard/review.md` (worktree, then main repo) into
|
|
4089
|
+
* `.context/review.md`. Never creates a Claude skill.
|
|
4090
|
+
*/
|
|
4091
|
+
declare function ensureReviewGuidelinesFile(worktreePath: string, repoPath?: string): EnsuredReviewGuidelines;
|
|
4076
4092
|
/**
|
|
4077
|
-
*
|
|
4078
|
-
* and `attach` share one committed file. Copies `.sideboard/review.md` or a
|
|
4079
|
-
* customized local attachment when present. Does not git commit.
|
|
4093
|
+
* @deprecated Prefer {@link ensureReviewGuidelinesFile}. Never writes a Claude skill.
|
|
4080
4094
|
*/
|
|
4081
|
-
declare function ensureReviewSkillFile(worktreePath: string): {
|
|
4095
|
+
declare function ensureReviewSkillFile(worktreePath: string, repoPath?: string): {
|
|
4082
4096
|
path: string;
|
|
4083
4097
|
content: string;
|
|
4084
4098
|
wrote: boolean;
|
|
4085
4099
|
};
|
|
4086
4100
|
/**
|
|
4087
4101
|
* Resolve which review guidelines to attach:
|
|
4088
|
-
* 1. `.claude/skills/review/SKILL.md` (committed Claude skill)
|
|
4089
|
-
* 2. `.context/
|
|
4090
|
-
* 3.
|
|
4091
|
-
* 4. Seed
|
|
4102
|
+
* 1. `.claude/skills/review/SKILL.md` (committed Claude skill, if present)
|
|
4103
|
+
* 2. `.context/review.md` (worktree copy)
|
|
4104
|
+
* 3. Copy `.sideboard/review.md` from the worktree or main repo into `.context/review.md`
|
|
4105
|
+
* 4. Seed `.context/review.md` from stock
|
|
4092
4106
|
*/
|
|
4093
|
-
declare function resolveReviewGuidelines(worktreePath: string): ResolvedReviewGuidelines;
|
|
4107
|
+
declare function resolveReviewGuidelines(worktreePath: string, repoPath?: string): ResolvedReviewGuidelines;
|
|
4094
4108
|
/**
|
|
4095
4109
|
* Ensure a file the user can edit for guidelines.
|
|
4096
|
-
* Prefers `.
|
|
4110
|
+
* Prefers an existing review skill; otherwise writes `.context/review.md`.
|
|
4097
4111
|
*/
|
|
4098
|
-
declare function ensureReviewRequestFile(worktreePath: string): ResolvedReviewGuidelines;
|
|
4112
|
+
declare function ensureReviewRequestFile(worktreePath: string, repoPath?: string): ResolvedReviewGuidelines;
|
|
4099
4113
|
declare function buildReviewRequestAttachment(content: string, opts?: {
|
|
4100
4114
|
path?: string;
|
|
4101
4115
|
name?: string;
|
|
@@ -4119,8 +4133,8 @@ declare function requestReview(threadRef: string, send: SendFn): Promise<Request
|
|
|
4119
4133
|
|
|
4120
4134
|
/**
|
|
4121
4135
|
* Workspace-local scratch (Conductor-style `.context/`), not committed.
|
|
4122
|
-
* Repo-owned Sideboard config stays under `.sideboard/` (settings)
|
|
4123
|
-
* `.claude/skills/`
|
|
4136
|
+
* Repo-owned Sideboard config stays under `.sideboard/` (settings).
|
|
4137
|
+
* Process guides live in `.claude/skills/` only when the repo already has them.
|
|
4124
4138
|
*/
|
|
4125
4139
|
/** Preferred local attachments root (plan, drops, review seed). */
|
|
4126
4140
|
declare const ATTACHMENTS_DIR = ".context/attachments";
|
|
@@ -5658,4 +5672,4 @@ declare function pollSlackOutboundWatches(opts?: {
|
|
|
5658
5672
|
now?: number;
|
|
5659
5673
|
}): Promise<void>;
|
|
5660
5674
|
|
|
5661
|
-
export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentInstructionFile, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CodeLineRange, type CodeRefInput, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, DETACHED_JOBS_DIR, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type ExpandResult, FAMOUS_SOCCER_TEAMS, FOLLOW_UP_BEHAVIORS, type FastForwardMainResult, type FollowUpBehavior, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GITHUB_PR_BODY_MAX_CHARS, GITHUB_PR_BODY_SAFE_CHARS, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueAssigneeFilter, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_DETACHED_JOBS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LIVE_TURN_SPAWN_GRACE_MS, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearAssigneeFilter, type LinearComment, type LinearIssue, type LinearIssueAttachment, type LinearIssueComment, type LinearIssueRef, type LinearIssueRelation, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesOptions, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, type PathRefInput, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedReviewGuidelines, type ReviewGuidelinesSource, type RunMode, type RunScript, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildCodeRefAttachment, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildLinearIssueFilter, buildPastedTextAttachment, buildPathRefAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, clampGithubPrBody, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codeRefRangeLabel, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, countUnpushedVsOrigin, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fastForwardMainCheckoutIfSafe, fetchOriginForWorktree, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, flipLinearRelationType, followUpBehavior, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, githubHttpsInsteadOfEntries, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhPrBodyTooLongError, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isInternalAgentStatusText, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueMatchesAssignee, issueSourceLabel, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearIssues, listLinearIssuesDirect, listLinearIssuesFiltered, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, markPrReady, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeCodeSelection, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originFetchBranch, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toAbleTimeIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, turnCostUsdFromCursorUsage, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withAgentInstructions, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };
|
|
5675
|
+
export { ABLETIME_MCP_PATH, AGENT_GIT_ACTIONS, AGENT_RUNNER_MAX_OLD_SPACE_MB, ATTACHMENTS_DIR, type AbleTimeAssignedIssuesResult, type AbleTimeMcpToolName, type AbleTimeOrientation, type AbleTimeProject, type AbleTimeTask, type AbleTimeViewer, type ActiveRun, type AddBoardPinInput, type AddStackLayerInput, type AdoptInput, type AdvancedAppSettings, type AgentAdapter, type AgentEvent, type AgentGitAction, type AgentInstructionFile, type AgentKind, type AgentModelCatalog, type AgentModelInfo, type AgentSetupActionResult, type AgentSetupInfo, type AgentSetupKind, type AgentStatus, type AgentTurnInput, type AnthropicCacheControl, type AppSettings, type ApplyIntoMainResult, type AttachCommand, type Autonomy, BAKED_SLACK_RELAY_URL, BRIGHTSY_MCP_ALLOWED_TOOLS, BRIGHTSY_SUMMARIZE_CONTEXT_TOOL, BUNDLED_LONG_RUNNING_PATH, BUNDLED_SKILL_PREFIX, type BoardPin, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, CHARS_PER_CONTEXT_TOKEN, CLAUDE_MODEL_CATALOG, CLOUD_COORDINATOR_BUSY_REPLY, CLOUD_COORDINATOR_STOPPED_REPLY, CLOUD_COORDINATOR_TIMEOUT_REPLY, CLOUD_ORCHESTRATOR_GOAL, CONTEXT_COMPACT_CHARS, CONTEXT_KEEP_RECENT_CHARS, CONTEXT_KEEP_RECENT_MESSAGES, CONTEXT_MIN_MESSAGES, CONTEXT_REVIEW_PATH, CONVENTION_SETUP_RELPATHS, COORDINATOR_TOOL_PLAYBOOK, type CaffeinateHoldState, type ClaudeHarnessSettings, type CleanupOrphansResult, type CliAgentKind, type CliExecutableSettings, type CloudConnectAgent, type CloudConnectOptions, type CloudConnectStatus, type CodeLineRange, type CodeRefInput, type CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CowboyThreadFields, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorAgentUsageSnapshot, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorUsageCost, type CursorWorktreesConfig, DEFAULT_ABLETIME_HOST, DEFAULT_WORKTREE_SORT, DETACHED_JOBS_DIR, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type EnsuredReviewGuidelines, type ExpandResult, FAMOUS_SOCCER_TEAMS, FOLLOW_UP_BEHAVIORS, type FastForwardMainResult, type FollowUpBehavior, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GITHUB_PR_BODY_MAX_CHARS, GITHUB_PR_BODY_SAFE_CHARS, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, HOME_BOARD_CACHE_TTL_MS, type HarnessId, type HomeBoardLoaded, type HomeBoardRemoteData, ISSUE_SOURCE_LABELS, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueAssigneeFilter, type IssueCycleInfo, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_DETACHED_JOBS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, LIVE_TURN_SPAWN_GRACE_MS, LONG_RUNNING_SKILL_COMMAND, type LandPreview, type LandResult, type LinearAssignedIssuesResult, type LinearAssigneeFilter, type LinearComment, type LinearIssue, type LinearIssueAttachment, type LinearIssueComment, type LinearIssueRef, type LinearIssueRelation, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesOptions, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, OPTIONAL_SERVICES, OPTIONAL_SERVICE_IDS, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, type OptionalServiceCliStatus, type OptionalServiceId, type OptionalServiceSpec, type OrchestrationQuotaOnLimit, Orchestrator, type OrchestratorAgentKind, type OrchestratorEvent, type OrchestratorRuntime, type OrphanWorktree, PASTE_ATTACH_MIN_CHARS, PASTE_ATTACH_MIN_LINES, PLAN_FILE_NAME, PLAN_FILE_REL, PLAN_MODE_INSTRUCTION, PLAN_QUESTION_ANSWERS_PREFIX, type PathRefInput, type PendingPlanQuestions, type PlanQuestion, type PlanQuestionAnswer, type PlanQuestionOption, type PlanToolPartLike, type PrActor, type PrCheckRun, type PrCommentInfo, type PrCommitInfo, type PrDetails, type PrInfo, type PrMeta, type PrReviewInfo, type PrStack, type PrStackLayer, type PresentedPlan, type PublicAppSettings, type PublicIntegrationsSettings, REPO_REVIEW_NAME, REPO_REVIEW_PATH, REVIEW_REQUEST_NAME, REVIEW_REQUEST_PATH, REVIEW_REQUEST_PREFILL, REVIEW_REQUEST_TEMPLATE, REVIEW_SKILL_NAME, REVIEW_SKILL_PATH, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedReviewGuidelines, type ReviewGuidelinesSource, type RunMode, type RunScript, SESSION_RESET_OCCUPANCY_TOKENS, SIDEBOARD_FORCE_STOP, SIDEBOARD_MCP_ALLOWED_TOOLS, SIDEBOARD_MCP_PROFILE_ENV, SLACK_LISTEN_STOPPED_REPLY, SLACK_LISTEN_TIMEOUT_REPLY, SLACK_OAUTH_CANCELLED, SLACK_OAUTH_REDIRECT, SLACK_PROGRESS_DELAY_MS, SLACK_PROGRESS_EDIT_MS, SLACK_REPLY_FORMATTING, SLACK_SEEN_REACTION, type ScheduleCreatedBy, type ScheduleWhen, type ScheduledTask, type ScriptHandle, type SetupRunResult, type SideboardMcpProfile, type SkillInfo, type SlackInboundMessage, type SlackListenOptions, type SlackListenStatus, SlackOAuthCancelledError, type SlackOutboundReply, type SlackOutboundWatch, type SlackRelayClientMessage, type SlackRelayClientOptions, SlackRelayHub, type SlackRelayServerHandle, type SlackRelayServerMessage, type SlackRelayServerOptions, type SlackWorkspaceInfo, type SourceType, type SpawnTurnHandle, type SummarizeResult, THINKING_EFFORTS, type TeamName, type ThinkingEffort, type Thread, type ThreadAttachment, type ThreadMessage, type ThreadOptionsPatch, type ThreadStatus, type TokenUsage, type ToolPartLike, type TranscriptToolDetail, type TurnCommand, type UpdateScheduledTaskPatch, type UsageScope, WORKTREE_MCP_TOOLS, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, type WorktreeSortMode, abletimeMcpRequest, abletimeMcpUrl, ackSlackInboundSeen, addBoardPin, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAgentRunnerHeapEnv, applyAppEnvironment, applyCompaction, applyForwardOccupancy, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAccessTokenNeedsRefresh, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildBrightsySessionSeed, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildCodeRefAttachment, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildLinearIssueFilter, buildPastedTextAttachment, buildPathRefAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, callAbleTimeTool, canonicalizeRepoPath, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, clampGithubPrBody, classifyWorktreeColumn, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, clearBoardPins, clearHomeBoardCache, cloneRepoIntoSideboard, codeRefRangeLabel, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectOptionalService, connectSlackToken, connectedOptionalServices, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, countUnpushedVsOrigin, cowboyModeEnabled, createAbleTimeTask, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, detectOptionalServiceClis, disconnectAbleTimeConnection, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectOptionalService, disconnectSlackWorkspace, discoverSkills, dropCachedPrefixOnResume, emptyPublicIntegrations, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAbleTimeTask, ensureAgentPath, ensureBrightsyLocalConfigFresh, ensureCloudCoordinator, ensureConnectedBrightsyTeamTokens, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewGuidelinesFile, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateOccupancyTokens, estimateThreadChars, expandComposerPrompt, extractBrightsyContextSummary, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fastForwardMainCheckoutIfSafe, fetchOriginForWorktree, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findLastBrightsyContextSummary, findLiveThreadForCreate, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, flipLinearRelationType, followUpBehavior, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatDetachedJobInvoke, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatLongRunningDirective, formatLongRunningReminder, formatMergePrError, formatMessagesAsTranscript, formatOptionalServicesDirective, formatOptionalServicesReminder, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatPrGateDirective, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackReplyContinuePrompt, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, forwardContextUsage, forwardOccupancyTokens, fromInclusiveInputUsage, getAbleTimeAccessToken, getAbleTimeHost, getAbleTimeOrientation, getAbleTimeTask, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getHomeBoardInputs, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, githubHttpsInsteadOfEntries, globalAgentCwd, groupHomeBoardWorktrees, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, installNpmGlobalPackage, installOptionalServiceCli, interruptSlackCoordinatorForInbound, invalidateThreadListCache, isAbleTimeConnected, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCowboyThread, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhPrBodyTooLongError, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isHomeBoardThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isInternalAgentStatusText, isIssueSourceConnected, isLinearConnected, isLinearOAuthCancelled, isOptionalServiceId, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPlanQuestionAnswersMessage, isPollWrapperToolName, isPrNotMergeableError, isPresentPlanToolName, isPrimaryCheckoutThread, isSessionQuotaLimit, isShellToolName, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isSubagentToolName, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isThreadRecordFile, isWorkspaceScratchPath, issueAttachmentForAbleTimeTask, issueMatchesAssignee, issueSourceLabel, lastRequestOccupancy, latestPendingPlanQuestions, linearAuthorizationHeader, linearCycleIsActive, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAbleTimeAssignedIssues, listAbleTimeProjects, listAbleTimeTasks, listAgentSetupInfo, listBoardPins, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearAssignedIssues, listLinearIssues, listLinearIssuesDirect, listLinearIssuesFiltered, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, liveActivitySummary, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadHomeBoardInputs, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, mapAbleTimeTask, markPrReady, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, messagePartParentId, messagesSinceLastBrightsyContextSummary, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeAbleTimeHost, normalizeCodeSelection, normalizeParseResult, normalizeServiceOrigin, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, optionalServiceConnected, optionalServiceSpec, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originFetchBranch, originGhRepoEnv, packagedDetachedJobPath, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permissionMode, persistPendingFileAttachments, persistVaultKeyInKeychain, planFileAbs, planQuestionsSignature, pollSlackOutboundWatches, posixShellSingleQuote, preferredCursorCostCents, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshBrightsyAccessToken, refreshGitHubAuth, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeBoardPin, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDetachedJobScript, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGitDirsForLockRecovery, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteAbleTimeError, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAbleTimeConnection, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, searchAbleTimeTasks, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRemoveWorktreeOnTeardown, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, showCostEnabled, sideboardHomeDir, sideboardMcpProfile, sideboardReposDir, sideboardWorkspacesDir, slackAppLevelToken, slackArchiveUrl, slackCoordinatorSourceRef, slackListenEnabled, slackOAuthCredentials, slackOAuthResultUrl, slackRelayUrl, slugify, spawnAgentTurn, splitForCompaction, stackAgentDefaultsFrom, stackIdFrom, stackMergeReadiness, stageAbsolutePathsAsAttachments, stageBuffersAsAttachments, startDevServer, startLinearOAuth, startMcpServer, startOrchestration, startSlackOAuth, startSlackRelayServer, stripBrightsyNdjsonNoise, stripNestedElectronEnv, submitPrStack, suggestSlug, sumUsageList, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, taskUrl, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadHasCompactedContext, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toAbleTimeIssueInfo, toPublicAppSettings, toolActivityLine, toolDescription, toolDetail, toolFilePath, totalTokens, turnCostUsdFromCursorUsage, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, verifyAbleTimeConnection, verifyOptionalService, visibleToolRowDetail, waitForPidExit, warmGithubAgentAuth, whichOnPath, withAgentInstructions, withEventParentId, withEventsParentId, withExportedPath, withMaxOldSpaceSize, withThreadLock, workspaceSettingsSourceLabel, worktreeBoardStatus, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };
|