@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
package/dist/index.d.cts CHANGED
@@ -2133,6 +2133,11 @@ interface SpawnTurnHandle {
2133
2133
  usage: TokenUsage | null;
2134
2134
  }>;
2135
2135
  }
2136
+ /**
2137
+ * Opt into 1h prompt-cache TTL for desktop gaps (read a diff, Slack, schedules).
2138
+ * Claude Code / OpenCode default to 5m on API keys. Honor an explicit 5m force.
2139
+ */
2140
+ declare function applyPromptCacheTtlEnv(agent: AgentKind, env: NodeJS.ProcessEnv): void;
2136
2141
  declare function spawnAgentTurn(thread: Thread, input: string | AgentTurnInput, onEvent: (event: AgentEvent) => void): Promise<SpawnTurnHandle>;
2137
2142
 
2138
2143
  declare function toolDetail(name: string, input?: Record<string, unknown>): string | undefined;
@@ -2374,8 +2379,8 @@ declare function runConventionSetup(repoPath: string, worktreePath: string, onLi
2374
2379
  defaultBranch?: string;
2375
2380
  }): Promise<SetupRunResult>;
2376
2381
  /**
2377
- * Setup for a new worktree. Order: Sideboard/Conductor `[scripts] setup`,
2378
- * then Cursor `.cursor/worktrees.json`, then conventional `script/setup` (etc).
2382
+ * Setup for a new worktree. Seeds `.claude/skills/review/SKILL.md` when missing,
2383
+ * then `[scripts] setup`, Cursor `.cursor/worktrees.json`, then `script/setup`.
2379
2384
  */
2380
2385
  declare function runWorkspaceSetup(repoPath: string, worktreePath: string, onLine?: (line: string) => void, opts?: {
2381
2386
  signal?: AbortSignal;
@@ -2655,14 +2660,24 @@ declare function summarizeConversation(transcript: string, opts?: {
2655
2660
  /** Deterministic fallback when Claude isn't available. */
2656
2661
  declare function extractiveSummary(transcript: string): string;
2657
2662
 
2658
- /** Rough char budget before we compact (≈ 25k tokens at ~4 chars/token). */
2659
- declare const CONTEXT_COMPACT_CHARS = 100000;
2663
+ /**
2664
+ * Sideboard transcript budget before summarizing older turns for the board /
2665
+ * future seed (≈ 100k tokens at ~4 chars/token). Independent of the CLI
2666
+ * session — compacting the store does not clear sessionId.
2667
+ */
2668
+ declare const CONTEXT_COMPACT_CHARS = 400000;
2660
2669
  /** Keep this much recent transcript after compaction. */
2661
2670
  declare const CONTEXT_KEEP_RECENT_CHARS = 24000;
2662
2671
  /** Always keep at least this many trailing messages. */
2663
2672
  declare const CONTEXT_KEEP_RECENT_MESSAGES = 12;
2664
2673
  /** Don't bother compacting tiny threads. */
2665
2674
  declare const CONTEXT_MIN_MESSAGES = 10;
2675
+ /**
2676
+ * Last-request occupancy at which the next turn should start a fresh CLI
2677
+ * session (seeded from the compacted transcript). ~75% of the 1M ring.
2678
+ * Below this, keep sessionId so prompt cache survives.
2679
+ */
2680
+ declare const SESSION_RESET_OCCUPANCY_TOKENS = 750000;
2666
2681
  interface CompactThresholds {
2667
2682
  maxChars?: number;
2668
2683
  keepRecentChars?: number;
@@ -2703,9 +2718,17 @@ interface CompactResult {
2703
2718
  method?: 'claude' | 'extractive';
2704
2719
  olderCount?: number;
2705
2720
  }
2721
+ /** Last agent turn's context-window occupancy, or 0. */
2722
+ declare function lastRequestOccupancy(thread: Pick<Thread, 'messages'>): number;
2706
2723
  /**
2707
- * If the thread transcript is oversized, summarize older turns, keep recent ones,
2708
- * and clear sessionId so the next agent turn starts fresh with a seed prompt.
2724
+ * True when the CLI session should be dropped so the next turn reseeds from
2725
+ * the (possibly compacted) Sideboard transcript instead of overflowing.
2726
+ */
2727
+ declare function shouldResetSessionForOccupancy(thread: Pick<Thread, 'messages'>, occupancyTokens?: number): boolean;
2728
+ /**
2729
+ * If the thread transcript is oversized, summarize older turns and keep recent
2730
+ * ones. The CLI session stays unless last-request occupancy is near the window
2731
+ * — killing --resume on every compact was a full prompt-cache miss.
2709
2732
  */
2710
2733
  declare function maybeCompactContext(thread: Thread, thresholds?: CompactThresholds, summarize?: typeof summarizeConversation): Promise<CompactResult>;
2711
2734
 
@@ -3227,21 +3250,26 @@ declare function startOrchestration(opts: {
3227
3250
  }): Promise<Thread>;
3228
3251
 
3229
3252
  /** Default Review request.md body (Conductor-style). Kept in sync with desktop review-request.ts. */
3230
- 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, say so and propose one sentence for `.sideboard/review.md` or a `.claude/skills/<name>/SKILL.md`. Do not only patch this diff when the same miss will happen again. New skills go under `.claude/skills` (Claude Code / attach) \u2014 not `.sideboard/skills`.\n";
3253
+ 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` (create the skill if it is missing \u2014 that is allowed and should be committed). Do not only patch this diff when the same miss will happen again. Do not write new skills under `.sideboard/skills/`. Do not use `.sideboard/review.md` for new notes.\n";
3254
+ /** Committed Claude Code project skill — Review attaches this when present. */
3255
+ declare const REVIEW_SKILL_PATH = ".claude/skills/review/SKILL.md";
3256
+ declare const REVIEW_SKILL_NAME = "review";
3257
+ /** Wrap guidelines as a Claude Code skill. Leaves existing frontmatter intact. */
3258
+ declare function wrapReviewSkillMarkdown(body: string): string;
3231
3259
 
3232
- /** Committed per-repo review guidelines (preferred when present). */
3260
+ /** Legacy committed guidelines. New repos use {@link REVIEW_SKILL_PATH}. */
3233
3261
  declare const REPO_REVIEW_PATH = ".sideboard/review.md";
3234
3262
  declare const REPO_REVIEW_NAME = "review.md";
3235
3263
  /**
3236
3264
  * Local scratch guidelines (gitignored under `.context/attachments/`).
3237
- * Used as override when no repo file exists, or as the stock seed target.
3265
+ * Used as a gitignored override when the review skill is absent.
3238
3266
  */
3239
3267
  declare const REVIEW_REQUEST_PATH = ".context/attachments/Review request.md";
3240
3268
  declare const LEGACY_REVIEW_REQUEST_PATH = ".sideboard/attachments/Review request.md";
3241
3269
  declare const REVIEW_REQUEST_NAME = "Review request.md";
3242
3270
  /** Short chat message — guidelines live in the attached review file. */
3243
3271
  declare const REVIEW_REQUEST_PREFILL = "Review changes in this workspace.";
3244
- type ReviewGuidelinesSource = 'repo' | 'local' | 'stock';
3272
+ type ReviewGuidelinesSource = 'skill' | 'repo' | 'local' | 'stock';
3245
3273
  interface ResolvedReviewGuidelines {
3246
3274
  path: string;
3247
3275
  name: string;
@@ -3253,19 +3281,27 @@ interface ResolvedReviewGuidelines {
3253
3281
  * findings-only stock template. Preserve real user customizations.
3254
3282
  */
3255
3283
  declare function shouldRefreshReviewRequestTemplate(content: string): boolean;
3284
+ /**
3285
+ * Write `.claude/skills/review/SKILL.md` when missing so Review, Claude Code,
3286
+ * and `attach` share one committed file. Copies `.sideboard/review.md` or a
3287
+ * customized local attachment when present. Does not git commit.
3288
+ */
3289
+ declare function ensureReviewSkillFile(worktreePath: string): {
3290
+ path: string;
3291
+ content: string;
3292
+ wrote: boolean;
3293
+ };
3256
3294
  /**
3257
3295
  * Resolve which review guidelines to attach:
3258
- * 1. `.sideboard/review.md` (committed, per-repo)
3259
- * 2. `.context/attachments/Review request.md` (local override)
3260
- * 3. Legacy `.sideboard/attachments/Review request.md`
3261
- * 4. Seed stock template into `.context/attachments/` (does not write the repo file)
3296
+ * 1. `.claude/skills/review/SKILL.md` (committed Claude skill)
3297
+ * 2. `.context/attachments/Review request.md` (local override, gitignored)
3298
+ * 3. Legacy `.sideboard/review.md` / `.sideboard/attachments/`
3299
+ * 4. Seed the review skill from stock (or copy legacy repo file)
3262
3300
  */
3263
3301
  declare function resolveReviewGuidelines(worktreePath: string): ResolvedReviewGuidelines;
3264
3302
  /**
3265
3303
  * Ensure a file the user can edit for guidelines.
3266
- * Prefers creating/opening committed `.sideboard/review.md` (per-repo).
3267
- * Falls back to refreshing a legacy local attachments file only when that is
3268
- * what already exists and the repo file does not.
3304
+ * Prefers `.claude/skills/review/SKILL.md` (portable, committed).
3269
3305
  */
3270
3306
  declare function ensureReviewRequestFile(worktreePath: string): ResolvedReviewGuidelines;
3271
3307
  declare function buildReviewRequestAttachment(content: string, opts?: {
@@ -3274,7 +3310,7 @@ declare function buildReviewRequestAttachment(content: string, opts?: {
3274
3310
  }): ThreadAttachment;
3275
3311
  /**
3276
3312
  * Read existing guidelines without creating files.
3277
- * Prefers repo `.sideboard/review.md`, then local attachments copy.
3313
+ * Prefers the review skill, then legacy `.sideboard/review.md`, then local copy.
3278
3314
  */
3279
3315
  declare function readExistingReviewRequestFile(worktreePath: string): string | null;
3280
3316
  interface RequestReviewResult {
@@ -3291,7 +3327,8 @@ declare function requestReview(threadRef: string, send: SendFn): Promise<Request
3291
3327
 
3292
3328
  /**
3293
3329
  * Workspace-local scratch (Conductor-style `.context/`), not committed.
3294
- * Repo-owned Sideboard config stays under `.sideboard/` (settings, review.md).
3330
+ * Repo-owned Sideboard config stays under `.sideboard/` (settings) and
3331
+ * `.claude/skills/` (review + process guides).
3295
3332
  */
3296
3333
  /** Preferred local attachments root (plan, drops, review seed). */
3297
3334
  declare const ATTACHMENTS_DIR = ".context/attachments";
@@ -3407,7 +3444,9 @@ declare const COORDINATOR_TOOL_PLAYBOOK: string;
3407
3444
  declare const SLACK_REPLY_FORMATTING: string;
3408
3445
  /**
3409
3446
  * Short identity block prepended to every orchestration turn prompt.
3410
- * Survives Claude `--resume` (which drops cachedPrefix).
3447
+ * Survives Claude `--resume` (which drops cachedPrefix). Fleet playbook lives
3448
+ * in AGENTS.md / CLAUDE.md — do not repeat it here (it would accumulate in
3449
+ * CLI history and occupy the cached conversation).
3411
3450
  */
3412
3451
  declare function coordinatorTurnReminder(opts: {
3413
3452
  parentId: string;
@@ -3456,6 +3495,8 @@ declare function startMcpServer(): Promise<void>;
3456
3495
  /** Injected Sideboard MCP: worktree turns list UI tools only; orchestration gets the fleet. */
3457
3496
  type SideboardMcpProfile = 'worktree' | 'orchestration';
3458
3497
  declare const SIDEBOARD_MCP_PROFILE_ENV = "SIDEBOARD_MCP_PROFILE";
3498
+ /** Tools registered when SIDEBOARD_MCP_PROFILE=worktree (coding chats). */
3499
+ declare const WORKTREE_MCP_TOOLS: readonly ["present_artifact", "ask_user", "present_plan", "present_schema", "present_files"];
3459
3500
  declare function sideboardMcpProfile(env?: NodeJS.ProcessEnv): SideboardMcpProfile;
3460
3501
 
3461
3502
  interface BrightsyLocalConfig {
@@ -4382,7 +4423,7 @@ interface SlackListenOptions {
4382
4423
  updateReply?: (msg: SlackInboundMessage, ts: string, text: string) => Promise<void>;
4383
4424
  /** Tests: delete a previously posted reply (chat.delete). */
4384
4425
  deleteReply?: (msg: SlackInboundMessage, ts: string) => Promise<void>;
4385
- /** Tests: override Working… delay / edit cadence. */
4426
+ /** Tests: override Thinking… delay / edit cadence. */
4386
4427
  progressDelayMs?: number;
4387
4428
  progressEditMs?: number;
4388
4429
  /** Tests: ack reactions without talking to Slack Web API. */
@@ -4408,9 +4449,9 @@ declare function formatSlackInboundPrompt(msg: SlackInboundMessage): string;
4408
4449
  * more than one device can see who answered and address follow-ups the same way.
4409
4450
  */
4410
4451
  declare function formatSlackSignedReply(deviceLabel: string, text: string): string;
4411
- /** First Working… post after the turn is still running this long. */
4452
+ /** First Thinking… post after the turn is still running this long. */
4412
4453
  declare const SLACK_PROGRESS_DELAY_MS = 20000;
4413
- /** Edit the Working… message at most this often. */
4454
+ /** Edit the Thinking… message at most this often. */
4414
4455
  declare const SLACK_PROGRESS_EDIT_MS = 15000;
4415
4456
  declare function formatSlackWorkingText(summary?: string | null): string;
4416
4457
  /** Slack emoji short name for “seen / looking at this”. */
@@ -4603,4 +4644,4 @@ interface SlackRelayClientOptions {
4603
4644
  */
4604
4645
  declare function runSlackRelayClient(opts: SlackRelayClientOptions): Promise<void>;
4605
4646
 
4606
- export { AGENT_GIT_ACTIONS, ATTACHMENTS_DIR, type ActiveRun, 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, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, 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 CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorWorktreesConfig, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type ExpandResult, FAMOUS_SOCCER_TEAMS, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, type HarnessId, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, type LandPreview, type LandResult, type LinearComment, type LinearIssue, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, 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, 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, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedReviewGuidelines, type ReviewGuidelinesSource, type RunMode, type RunScript, 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 SlackReplyBadge, 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, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, ackSlackInboundSeen, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAppEnvironment, applyCompaction, applyGithubGitAuthEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildPastedTextAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, cloneRepoIntoSideboard, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectSlackToken, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectSlackWorkspace, discoverSkills, dismissSlackReplyBadge, dropCachedPrefixOnResume, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAgentPath, ensureCloudCoordinator, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewRequestFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateThreadChars, expandComposerPrompt, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatMergePrError, formatMessagesAsTranscript, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, fromInclusiveInputUsage, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, globalAgentCwd, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, interruptSlackCoordinatorForInbound, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isLinearConnected, isLinearOAuthCancelled, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPrNotMergeableError, isPresentPlanToolName, isSessionQuotaLimit, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isWorkspaceScratchPath, linearAuthorizationHeader, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAgentSetupInfo, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearIssues, listLinearIssuesDirect, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackReplyBadges, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeParseResult, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originGhRepoEnv, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permalinkForSlackReplyBadge, permissionMode, persistVaultKeyInKeychain, planFileAbs, posixShellSingleQuote, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshGitHubAuth, refreshSlackReplyBadges, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRunWorktreeCleanup, 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, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toPublicAppSettings, toolDescription, toolDetail, toolFilePath, totalTokens, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, waitForPidExit, warmGithubAgentAuth, withAgentInstructions, withExportedPath, withThreadLock, workspaceSettingsSourceLabel, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };
4647
+ export { AGENT_GIT_ACTIONS, ATTACHMENTS_DIR, type ActiveRun, 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, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, 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 CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorWorktreesConfig, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type ExpandResult, FAMOUS_SOCCER_TEAMS, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, type HarnessId, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, type LandPreview, type LandResult, type LinearComment, type LinearIssue, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, 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, 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 SlackReplyBadge, 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, ackSlackInboundSeen, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAppEnvironment, applyCompaction, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildPastedTextAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, cloneRepoIntoSideboard, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectSlackToken, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectSlackWorkspace, discoverSkills, dismissSlackReplyBadge, dropCachedPrefixOnResume, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAgentPath, ensureCloudCoordinator, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateThreadChars, expandComposerPrompt, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatMergePrError, formatMessagesAsTranscript, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, fromInclusiveInputUsage, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, globalAgentCwd, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, interruptSlackCoordinatorForInbound, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isLinearConnected, isLinearOAuthCancelled, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPrNotMergeableError, isPresentPlanToolName, isSessionQuotaLimit, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isWorkspaceScratchPath, lastRequestOccupancy, linearAuthorizationHeader, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAgentSetupInfo, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearIssues, listLinearIssuesDirect, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackReplyBadges, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeParseResult, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originGhRepoEnv, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permalinkForSlackReplyBadge, permissionMode, persistVaultKeyInKeychain, planFileAbs, posixShellSingleQuote, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshGitHubAuth, refreshSlackReplyBadges, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, 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, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toPublicAppSettings, toolDescription, toolDetail, toolFilePath, totalTokens, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, waitForPidExit, warmGithubAgentAuth, withAgentInstructions, withExportedPath, withThreadLock, workspaceSettingsSourceLabel, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };
package/dist/index.d.ts CHANGED
@@ -2133,6 +2133,11 @@ interface SpawnTurnHandle {
2133
2133
  usage: TokenUsage | null;
2134
2134
  }>;
2135
2135
  }
2136
+ /**
2137
+ * Opt into 1h prompt-cache TTL for desktop gaps (read a diff, Slack, schedules).
2138
+ * Claude Code / OpenCode default to 5m on API keys. Honor an explicit 5m force.
2139
+ */
2140
+ declare function applyPromptCacheTtlEnv(agent: AgentKind, env: NodeJS.ProcessEnv): void;
2136
2141
  declare function spawnAgentTurn(thread: Thread, input: string | AgentTurnInput, onEvent: (event: AgentEvent) => void): Promise<SpawnTurnHandle>;
2137
2142
 
2138
2143
  declare function toolDetail(name: string, input?: Record<string, unknown>): string | undefined;
@@ -2374,8 +2379,8 @@ declare function runConventionSetup(repoPath: string, worktreePath: string, onLi
2374
2379
  defaultBranch?: string;
2375
2380
  }): Promise<SetupRunResult>;
2376
2381
  /**
2377
- * Setup for a new worktree. Order: Sideboard/Conductor `[scripts] setup`,
2378
- * then Cursor `.cursor/worktrees.json`, then conventional `script/setup` (etc).
2382
+ * Setup for a new worktree. Seeds `.claude/skills/review/SKILL.md` when missing,
2383
+ * then `[scripts] setup`, Cursor `.cursor/worktrees.json`, then `script/setup`.
2379
2384
  */
2380
2385
  declare function runWorkspaceSetup(repoPath: string, worktreePath: string, onLine?: (line: string) => void, opts?: {
2381
2386
  signal?: AbortSignal;
@@ -2655,14 +2660,24 @@ declare function summarizeConversation(transcript: string, opts?: {
2655
2660
  /** Deterministic fallback when Claude isn't available. */
2656
2661
  declare function extractiveSummary(transcript: string): string;
2657
2662
 
2658
- /** Rough char budget before we compact (≈ 25k tokens at ~4 chars/token). */
2659
- declare const CONTEXT_COMPACT_CHARS = 100000;
2663
+ /**
2664
+ * Sideboard transcript budget before summarizing older turns for the board /
2665
+ * future seed (≈ 100k tokens at ~4 chars/token). Independent of the CLI
2666
+ * session — compacting the store does not clear sessionId.
2667
+ */
2668
+ declare const CONTEXT_COMPACT_CHARS = 400000;
2660
2669
  /** Keep this much recent transcript after compaction. */
2661
2670
  declare const CONTEXT_KEEP_RECENT_CHARS = 24000;
2662
2671
  /** Always keep at least this many trailing messages. */
2663
2672
  declare const CONTEXT_KEEP_RECENT_MESSAGES = 12;
2664
2673
  /** Don't bother compacting tiny threads. */
2665
2674
  declare const CONTEXT_MIN_MESSAGES = 10;
2675
+ /**
2676
+ * Last-request occupancy at which the next turn should start a fresh CLI
2677
+ * session (seeded from the compacted transcript). ~75% of the 1M ring.
2678
+ * Below this, keep sessionId so prompt cache survives.
2679
+ */
2680
+ declare const SESSION_RESET_OCCUPANCY_TOKENS = 750000;
2666
2681
  interface CompactThresholds {
2667
2682
  maxChars?: number;
2668
2683
  keepRecentChars?: number;
@@ -2703,9 +2718,17 @@ interface CompactResult {
2703
2718
  method?: 'claude' | 'extractive';
2704
2719
  olderCount?: number;
2705
2720
  }
2721
+ /** Last agent turn's context-window occupancy, or 0. */
2722
+ declare function lastRequestOccupancy(thread: Pick<Thread, 'messages'>): number;
2706
2723
  /**
2707
- * If the thread transcript is oversized, summarize older turns, keep recent ones,
2708
- * and clear sessionId so the next agent turn starts fresh with a seed prompt.
2724
+ * True when the CLI session should be dropped so the next turn reseeds from
2725
+ * the (possibly compacted) Sideboard transcript instead of overflowing.
2726
+ */
2727
+ declare function shouldResetSessionForOccupancy(thread: Pick<Thread, 'messages'>, occupancyTokens?: number): boolean;
2728
+ /**
2729
+ * If the thread transcript is oversized, summarize older turns and keep recent
2730
+ * ones. The CLI session stays unless last-request occupancy is near the window
2731
+ * — killing --resume on every compact was a full prompt-cache miss.
2709
2732
  */
2710
2733
  declare function maybeCompactContext(thread: Thread, thresholds?: CompactThresholds, summarize?: typeof summarizeConversation): Promise<CompactResult>;
2711
2734
 
@@ -3227,21 +3250,26 @@ declare function startOrchestration(opts: {
3227
3250
  }): Promise<Thread>;
3228
3251
 
3229
3252
  /** Default Review request.md body (Conductor-style). Kept in sync with desktop review-request.ts. */
3230
- 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, say so and propose one sentence for `.sideboard/review.md` or a `.claude/skills/<name>/SKILL.md`. Do not only patch this diff when the same miss will happen again. New skills go under `.claude/skills` (Claude Code / attach) \u2014 not `.sideboard/skills`.\n";
3253
+ 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` (create the skill if it is missing \u2014 that is allowed and should be committed). Do not only patch this diff when the same miss will happen again. Do not write new skills under `.sideboard/skills/`. Do not use `.sideboard/review.md` for new notes.\n";
3254
+ /** Committed Claude Code project skill — Review attaches this when present. */
3255
+ declare const REVIEW_SKILL_PATH = ".claude/skills/review/SKILL.md";
3256
+ declare const REVIEW_SKILL_NAME = "review";
3257
+ /** Wrap guidelines as a Claude Code skill. Leaves existing frontmatter intact. */
3258
+ declare function wrapReviewSkillMarkdown(body: string): string;
3231
3259
 
3232
- /** Committed per-repo review guidelines (preferred when present). */
3260
+ /** Legacy committed guidelines. New repos use {@link REVIEW_SKILL_PATH}. */
3233
3261
  declare const REPO_REVIEW_PATH = ".sideboard/review.md";
3234
3262
  declare const REPO_REVIEW_NAME = "review.md";
3235
3263
  /**
3236
3264
  * Local scratch guidelines (gitignored under `.context/attachments/`).
3237
- * Used as override when no repo file exists, or as the stock seed target.
3265
+ * Used as a gitignored override when the review skill is absent.
3238
3266
  */
3239
3267
  declare const REVIEW_REQUEST_PATH = ".context/attachments/Review request.md";
3240
3268
  declare const LEGACY_REVIEW_REQUEST_PATH = ".sideboard/attachments/Review request.md";
3241
3269
  declare const REVIEW_REQUEST_NAME = "Review request.md";
3242
3270
  /** Short chat message — guidelines live in the attached review file. */
3243
3271
  declare const REVIEW_REQUEST_PREFILL = "Review changes in this workspace.";
3244
- type ReviewGuidelinesSource = 'repo' | 'local' | 'stock';
3272
+ type ReviewGuidelinesSource = 'skill' | 'repo' | 'local' | 'stock';
3245
3273
  interface ResolvedReviewGuidelines {
3246
3274
  path: string;
3247
3275
  name: string;
@@ -3253,19 +3281,27 @@ interface ResolvedReviewGuidelines {
3253
3281
  * findings-only stock template. Preserve real user customizations.
3254
3282
  */
3255
3283
  declare function shouldRefreshReviewRequestTemplate(content: string): boolean;
3284
+ /**
3285
+ * Write `.claude/skills/review/SKILL.md` when missing so Review, Claude Code,
3286
+ * and `attach` share one committed file. Copies `.sideboard/review.md` or a
3287
+ * customized local attachment when present. Does not git commit.
3288
+ */
3289
+ declare function ensureReviewSkillFile(worktreePath: string): {
3290
+ path: string;
3291
+ content: string;
3292
+ wrote: boolean;
3293
+ };
3256
3294
  /**
3257
3295
  * Resolve which review guidelines to attach:
3258
- * 1. `.sideboard/review.md` (committed, per-repo)
3259
- * 2. `.context/attachments/Review request.md` (local override)
3260
- * 3. Legacy `.sideboard/attachments/Review request.md`
3261
- * 4. Seed stock template into `.context/attachments/` (does not write the repo file)
3296
+ * 1. `.claude/skills/review/SKILL.md` (committed Claude skill)
3297
+ * 2. `.context/attachments/Review request.md` (local override, gitignored)
3298
+ * 3. Legacy `.sideboard/review.md` / `.sideboard/attachments/`
3299
+ * 4. Seed the review skill from stock (or copy legacy repo file)
3262
3300
  */
3263
3301
  declare function resolveReviewGuidelines(worktreePath: string): ResolvedReviewGuidelines;
3264
3302
  /**
3265
3303
  * Ensure a file the user can edit for guidelines.
3266
- * Prefers creating/opening committed `.sideboard/review.md` (per-repo).
3267
- * Falls back to refreshing a legacy local attachments file only when that is
3268
- * what already exists and the repo file does not.
3304
+ * Prefers `.claude/skills/review/SKILL.md` (portable, committed).
3269
3305
  */
3270
3306
  declare function ensureReviewRequestFile(worktreePath: string): ResolvedReviewGuidelines;
3271
3307
  declare function buildReviewRequestAttachment(content: string, opts?: {
@@ -3274,7 +3310,7 @@ declare function buildReviewRequestAttachment(content: string, opts?: {
3274
3310
  }): ThreadAttachment;
3275
3311
  /**
3276
3312
  * Read existing guidelines without creating files.
3277
- * Prefers repo `.sideboard/review.md`, then local attachments copy.
3313
+ * Prefers the review skill, then legacy `.sideboard/review.md`, then local copy.
3278
3314
  */
3279
3315
  declare function readExistingReviewRequestFile(worktreePath: string): string | null;
3280
3316
  interface RequestReviewResult {
@@ -3291,7 +3327,8 @@ declare function requestReview(threadRef: string, send: SendFn): Promise<Request
3291
3327
 
3292
3328
  /**
3293
3329
  * Workspace-local scratch (Conductor-style `.context/`), not committed.
3294
- * Repo-owned Sideboard config stays under `.sideboard/` (settings, review.md).
3330
+ * Repo-owned Sideboard config stays under `.sideboard/` (settings) and
3331
+ * `.claude/skills/` (review + process guides).
3295
3332
  */
3296
3333
  /** Preferred local attachments root (plan, drops, review seed). */
3297
3334
  declare const ATTACHMENTS_DIR = ".context/attachments";
@@ -3407,7 +3444,9 @@ declare const COORDINATOR_TOOL_PLAYBOOK: string;
3407
3444
  declare const SLACK_REPLY_FORMATTING: string;
3408
3445
  /**
3409
3446
  * Short identity block prepended to every orchestration turn prompt.
3410
- * Survives Claude `--resume` (which drops cachedPrefix).
3447
+ * Survives Claude `--resume` (which drops cachedPrefix). Fleet playbook lives
3448
+ * in AGENTS.md / CLAUDE.md — do not repeat it here (it would accumulate in
3449
+ * CLI history and occupy the cached conversation).
3411
3450
  */
3412
3451
  declare function coordinatorTurnReminder(opts: {
3413
3452
  parentId: string;
@@ -3456,6 +3495,8 @@ declare function startMcpServer(): Promise<void>;
3456
3495
  /** Injected Sideboard MCP: worktree turns list UI tools only; orchestration gets the fleet. */
3457
3496
  type SideboardMcpProfile = 'worktree' | 'orchestration';
3458
3497
  declare const SIDEBOARD_MCP_PROFILE_ENV = "SIDEBOARD_MCP_PROFILE";
3498
+ /** Tools registered when SIDEBOARD_MCP_PROFILE=worktree (coding chats). */
3499
+ declare const WORKTREE_MCP_TOOLS: readonly ["present_artifact", "ask_user", "present_plan", "present_schema", "present_files"];
3459
3500
  declare function sideboardMcpProfile(env?: NodeJS.ProcessEnv): SideboardMcpProfile;
3460
3501
 
3461
3502
  interface BrightsyLocalConfig {
@@ -4382,7 +4423,7 @@ interface SlackListenOptions {
4382
4423
  updateReply?: (msg: SlackInboundMessage, ts: string, text: string) => Promise<void>;
4383
4424
  /** Tests: delete a previously posted reply (chat.delete). */
4384
4425
  deleteReply?: (msg: SlackInboundMessage, ts: string) => Promise<void>;
4385
- /** Tests: override Working… delay / edit cadence. */
4426
+ /** Tests: override Thinking… delay / edit cadence. */
4386
4427
  progressDelayMs?: number;
4387
4428
  progressEditMs?: number;
4388
4429
  /** Tests: ack reactions without talking to Slack Web API. */
@@ -4408,9 +4449,9 @@ declare function formatSlackInboundPrompt(msg: SlackInboundMessage): string;
4408
4449
  * more than one device can see who answered and address follow-ups the same way.
4409
4450
  */
4410
4451
  declare function formatSlackSignedReply(deviceLabel: string, text: string): string;
4411
- /** First Working… post after the turn is still running this long. */
4452
+ /** First Thinking… post after the turn is still running this long. */
4412
4453
  declare const SLACK_PROGRESS_DELAY_MS = 20000;
4413
- /** Edit the Working… message at most this often. */
4454
+ /** Edit the Thinking… message at most this often. */
4414
4455
  declare const SLACK_PROGRESS_EDIT_MS = 15000;
4415
4456
  declare function formatSlackWorkingText(summary?: string | null): string;
4416
4457
  /** Slack emoji short name for “seen / looking at this”. */
@@ -4603,4 +4644,4 @@ interface SlackRelayClientOptions {
4603
4644
  */
4604
4645
  declare function runSlackRelayClient(opts: SlackRelayClientOptions): Promise<void>;
4605
4646
 
4606
- export { AGENT_GIT_ACTIONS, ATTACHMENTS_DIR, type ActiveRun, 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, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, 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 CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorWorktreesConfig, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type ExpandResult, FAMOUS_SOCCER_TEAMS, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, type HarnessId, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, type LandPreview, type LandResult, type LinearComment, type LinearIssue, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, 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, 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, type RepoSettings, type RepoSetupInfo, type RequestReviewResult, type ResolvedReviewGuidelines, type ReviewGuidelinesSource, type RunMode, type RunScript, 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 SlackReplyBadge, 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, type Workspace, type WorkspaceInventoryEntry, type WorkspaceScriptEnvOpts, ackSlackInboundSeen, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAppEnvironment, applyCompaction, applyGithubGitAuthEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildPastedTextAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, cloneRepoIntoSideboard, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectSlackToken, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectSlackWorkspace, discoverSkills, dismissSlackReplyBadge, dropCachedPrefixOnResume, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAgentPath, ensureCloudCoordinator, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewRequestFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateThreadChars, expandComposerPrompt, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatMergePrError, formatMessagesAsTranscript, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, fromInclusiveInputUsage, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, globalAgentCwd, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, interruptSlackCoordinatorForInbound, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isLinearConnected, isLinearOAuthCancelled, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPrNotMergeableError, isPresentPlanToolName, isSessionQuotaLimit, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isWorkspaceScratchPath, linearAuthorizationHeader, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAgentSetupInfo, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearIssues, listLinearIssuesDirect, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackReplyBadges, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeParseResult, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originGhRepoEnv, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permalinkForSlackReplyBadge, permissionMode, persistVaultKeyInKeychain, planFileAbs, posixShellSingleQuote, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshGitHubAuth, refreshSlackReplyBadges, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldRunWorktreeCleanup, 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, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toPublicAppSettings, toolDescription, toolDetail, toolFilePath, totalTokens, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, waitForPidExit, warmGithubAgentAuth, withAgentInstructions, withExportedPath, withThreadLock, workspaceSettingsSourceLabel, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };
4647
+ export { AGENT_GIT_ACTIONS, ATTACHMENTS_DIR, type ActiveRun, 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, type BranchInfo, type BrightsyAccount, type BrightsyChatTarget, type BrightsyChatTargets, type BrightsyCloudConnectAgent, type BrightsyHarnessSettings, type BrightsySession, BrightsySideboardApi, type BrightsyTeamTargets, 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 CompactResult, type CompactThresholds, type ComposerFileBuffer, type ConductorSettings, type ConductorWorkspace, type ConnectedBrightsyTeamInfo, type ConventionSetupFile, type CreateChatTabInput, type CreateGlobalChatOpts, type CreateScheduledTaskInput, type CreateStackInput, type CreateThreadInput, type CreateWorktreeResult, type CursorModelInfo, type CursorSdkStreamMessage, type CursorTurnRequest, type CursorWorktreesConfig, type DefaultsAppSettings, type DevServerHandle, type DiffCommentInput, type DiffCommentLine, type DiffCommit, type DiffFile, type DiffResult, type DiffScope, type DiffScopeStat, type ExpandResult, FAMOUS_SOCCER_TEAMS, type ForkChatTabInput, type ForkThreadWorktreeInput, type FormatGhLandErrorOptions, GITHUB_GIT_AUTH_MODES, GLOBAL_WORKSPACE_ID, type GetDiffOptions, type GhStackStatus, type GitHubStatus, type GitWorktreeStatus, type GithubGitAuthMode, HARNESS_ENV_KEYS, type HarnessId, type InitStackFromThreadInput, type IntegrationsSettings, type IpcApi, type IssueInfo, type IssueSource, LEGACY_ATTACHMENTS_DIR, LEGACY_PLAN_FILE_REL, LEGACY_REVIEW_REQUEST_PATH, LINEAR_OAUTH_CANCELLED, LINEAR_OAUTH_PORT, LINEAR_OAUTH_REDIRECT, LINEAR_OAUTH_SCOPES, type LandPreview, type LandResult, type LinearComment, type LinearIssue, LinearOAuthCancelledError, type LinearTeam, type LinearTeamsResult, type LinearWorkflowState, type ListIssuesResult, MAX_ANTHROPIC_CACHE_CONTROL_BLOCKS, type McpServerStatus, type MessagePart, ORCHESTRATOR_AGENT_KINDS, type OpenPrStackLayersInput, type OpenStackLayerInput, type OpenStackLayerResult, 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, 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 SlackReplyBadge, 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, ackSlackInboundSeen, addPrStackLayer, addStackLayerFromThread, addWorkspace, adoptThread, agentGitPrompt, allAdapters, allocatePort, allocatePortRange, allocateTeamName, allocateTeamSlug, appDataDir, appSettingsPath, appendIndexedGitConfig, appendMessage, applyAgentEvent, applyAppEnvironment, applyCompaction, applyGithubGitAuthEnv, applyPromptCacheTtlEnv, applyThreadIntoMain, applyTurnUsage, armSchedules, assertOrchestratorCapableAgent, attachmentFromAbsolutePath, attachmentsFromBuffers, attachmentsFromWorktreePaths, attachmentsGitignoreBody, autoArchiveOnMergeEnabled, autoCleanupOrphansEnabled, autoRenameBranchEnabled, autoRunAfterSetupEnabled, branchDisplayLabel, brightsyAdapter, brightsyCloudConnectAgent, brightsyCloudConnectEnabled, brightsyConfigPath, brightsyInjectWorktreeMcpEnabled, brightsyMcpAllowedTools, brightsyMcpServerName, buildCachedUserContent, buildClaudeStreamJsonUserMessage, buildDiffCommentAttachment, buildForkTranscriptAttachment, buildPastedTextAttachment, buildReviewRequestAttachment, buildSessionSeed, buildWorkspaceScriptEnv, caffeinateHoldPath, caffeinateWhileCloudConnectEnabled, caffeinateWhileRunningEnabled, caffeinateWhileSchedulesEnabled, caffeinateWhileSlackListenEnabled, captureLoginEnv, captureTurnBaseline, checkoutPrStackLayer, childEnvWithAppSettings, claimDesktopHost, claudeAdapter, claudeChromeEnabled, claudeUserSettingsPath, cleanupOrphanWorktrees, cloneRepoIntoSideboard, codexAdapter, codexSandboxWritableRootsArgs, codexUnattendedGitConfigArgs, coerceOrchestratorAgent, collectTakenTeamSlugs, commentLinearIssue, commitAll, computeNextRunAt, conductorBundledBinDir, conductorDbPath, confirmLand, connectBrightsyTeam, connectSlackToken, contextTokens, coordinatorSystemPrompt, coordinatorTurnReminder, copyConfiguredFiles, countCacheControlBlocks, createChatTab, createEmptyThread, createExistingBranchWorktree, createGlobalChat, createLinearIssue, createLinearPkce, createOrUpdatePr, createPrStack, createSchedule, createThread, createThreadWorktree, currentBranch, cursorAdapter, cursorSdkMessageToEvents, decodeBrightsyTarget, defaultScheduleName, deleteBranchOnPurgeEnabled, deleteSchedule, deleteThreadRecord, desktopHostPidPath, detectAgents, detectGhStack, detectLocalMergeConflicts, disconnectBrightsyTeam, disconnectLinear, disconnectLinearConnection, disconnectSlackWorkspace, discoverSkills, dismissSlackReplyBadge, dropCachedPrefixOnResume, encodeBrightsyTarget, enrichPathWithNpmGlobalBin, enrichWorkspacesWithGithub, ensureAgentPath, ensureCloudCoordinator, ensureGhPreferOrigin, ensureGlobalCoordinatorCwd, ensureReviewRequestFile, ensureReviewSkillFile, ensureSlackCoordinator, ensureSlackDeviceIdentity, ensureWorkspace, estimateMessageChars, estimateThreadChars, expandComposerPrompt, extractGhErrorDetail, extractPendingPlanQuestions, extractPresentedPlan, extractiveSummary, fetchPrHead, finalizeParts, findConventionSetup, findInvalidCacheControlTtlOrder, findOrphanWorktrees, findSlackCoordinator, findThreadByRef, findThreadForStackLayer, fireSchedule, flattenTurnInput, forkChatTab, forkMessageSlice, forkThreadWorktree, formatAgentInstructions, formatArtifactDirective, formatBrightsyFetchError, formatFetchError, formatGhLandError, formatGitAuthModeDirective, formatIpcInvokeError, formatMergePrError, formatMessagesAsTranscript, formatPlanQuestionAnswers, formatPlanQuestionsForChat, formatProcessGuideDirective, formatRateLimitResetHint, formatRenameBranchDirective, formatScheduleWhen, formatScheduledPrompt, formatSlackExternalReplyPrompt, formatSlackInboundPrompt, formatSlackRepliesForTurn, formatSlackSignedReply, formatSlackWorkingText, formatTranscriptMarkdown, formatUiReminder, formatWorkspaceInventory, formatWorktreeDirective, formatWorktreeReminder, fromInclusiveInputUsage, getAdapter, getAgentSetupInfo, getBrightsySession, getCaffeinateHold, getDefaultAgent, getDefaultEffort, getDefaultFast, getDefaultModel, getDefaultRunScript, getDiff, getDiffSummary, getGitHubStatus, getGithubGitAuthMode, getGithubPat, getIssueSource, getLinearApiKey, getLinearAuthToken, getLinearIssue, getOrchestrator, getPr, getPrChecks, getPrDetails, getPrForHeadBranch, getPrMeta, getPrStack, getRepoSetupInfo, getRunMode, getRunScript, getSchedule, getSlackWorkspace, gh, ghHeadRef, ghRepoSelectArgs, git, githubAgentGitEnv, globalAgentCwd, handleSlackInbound, harnessEnvKey, hasBakedLinearOAuth, hasBakedSlackOAuth, hasConductorHook, hasConventionSetup, hasCursorWorktreeSetup, hasEnabledSchedules, hasRepoHook, hasWorkspaceHook, healOrchestrationSoccerTitles, httpFetch, importConductorWorkspace, importConductorWorkspaceAsync, initPrStack, initStackFromThread, initializeGitRepository, inspectGitWorktree, installAgent, interruptSlackCoordinatorForInbound, isAskUserToolName, isBrightsyConnected, isBrightsyNdjsonLine, isCloudCoordinatorThread, isConductorBundledCli, isCursorAutoModel, isDefaultishSourceRef, isDesktopHostAlive, isDirty, isGhRateLimitError, isGlobalRepoPath, isGlobalThread, isImageFilePath, isInPrStack, isInboundForThisDesktop, isLinearConnected, isLinearOAuthCancelled, isOrchestratorCapableAgent, isOrchestratorThread, isPidAlive, isPlaceholderBranch, isPrNotMergeableError, isPresentPlanToolName, isSessionQuotaLimit, isSideboardScratchPath, isSlackCoordinatorThread, isSlackExternalReplyPrompt, isSlackOAuthCancelled, isThinkingEffort, isThisProcessDesktopHost, isThreadCaffeinated, isWorkspaceScratchPath, lastRequestOccupancy, linearAuthorizationHeader, linearGraphql, linearOAuthAuthorizeUrl, linearOAuthCredentials, listAgentSetupInfo, listBranchCommits, listBranches, listBrightsyAccounts, listBrightsyChatTargets, listCodexModels, listConductorWorkspaces, listConnectedBrightsyTeams, listCursorModels, listGitHubIssues, listGlobalThreads, listIssues, listLinearIssues, listLinearIssuesDirect, listLinearTeams, listModelsForAgent, listOpencodeModels, listPrs, listRunScripts, listSchedules, listSlackOutboundWatches, listSlackReplyBadges, listSlackWorkspaces, listThreads, listWorkspaces, listWorktreeFiles, listWorktrees, loadAgentInstructions, loadAppSettings, loadBrightsyConfig, loadConductorSettings, loadRepoSettings, loadWorkspaceSettings, locksDir, loginAgent, lookupSoccerTeam, maxConcurrentAgents, maybeCompactContext, mcpAllowTools, mcpAuthWarnings, mergeAgentGitAuthEnv, mergePr, mergePrStack, mergeSideboardIntoMcpServersJson, mergeUsage, nextPastedTextName, nextThinkingEffort, nonInteractiveGitProcessEnv, normalizeParseResult, normalizeThinkingEffort, normalizeThread, normalizeTurnInput, normalizeWorktreePath, openInSystemTerminal, openPrStackLayers, openStackLayer, opencodeAdapter, orchestrationQuotaFallbackAgent, orchestrationQuotaOnLimit, orchestrationTitleNeedsSoccerNickname, orchestratorSessionPoisonedByBuiltins, originGhRepoEnv, parseCursorRunnerLine, parseDurationMs, parseForceStopMessage, parseGhStackViewJson, parseGithubSlugFromRemoteUrl, parseMcpList, parsePlanQuestionsInput, parseSessionQuotaResetAt, parseSlackRelayClientMessage, parseSlackRelayServerMessage, partsToAssistantText, pastedTextStats, pendingSlackExternalReplies, permalinkForSlackReplyBadge, permissionMode, persistVaultKeyInKeychain, planFileAbs, posixShellSingleQuote, prepareTerminalCommand, previewLand, promptMentionsBrightsy, pushBranch, readExistingReviewRequestFile, readKeychainVaultKey, readPlanFile, readSkillBody, readThread, readWorktreeFile, readWorktreeFileForUpload, readWorktreeInclude, recordScheduleRun, recordSlackOutboundWatch, refreshGitHubAuth, refreshSlackReplyBadges, registerPackagedUserMcpClients, releaseCaffeinateHoldForThread, releaseDesktopHost, removeWorkspace, removeWorktree, repoSlug, requestOccupancy, requestReview, requireAgent, resetGhStackDetectCache, resetGithubAgentTokenMemo, resolveAgentExecutable, resolveAgentGitAuthEnv, resolveClaudeExecutable, resolveCodexGitWritableRoots, resolveCommandBinarySync, resolveConductorCursorAgentId, resolveCursorModelId, resolveDefaultBranch, resolveDiffBaseRef, resolveEffectiveIssueSource, resolveFilesToCopy, resolveGhAuthToken, resolveGithubAgentToken, resolveGithubRepoSlug, resolveLinearState, resolveLinearTeam, resolveLoginCommand, resolveNewThreadOptions, resolvePlanMarkdown, resolvePrSelector, resolvePrSelectors, resolveQuotaFallbackAgent, resolveRepoRoot, resolveReviewGuidelines, resolveScheduleThreadId, resolveSlackListenMode, resolveThreadDefaults, resolveThreadEffort, resolveVaultKey, resolveWorktreeStartPoint, rewriteLinearError, run, runArchiveScript, runCloudConnect, runConventionSetup, runCursorWorktreeSetup, runSetupScript, runSlackListen, runSlackRelayClient, runWorkspaceSetup, sameWorktreePath, sanitizeMcpServerName, saveAppSettings, saveLinearOAuth, schedulesPath, scrubGithubTokensFromChildEnv, secureFileUnlocksWith, setCaffeinateHold, setHttpFetchImpl, setStatus, setVaultMasterKey, settingsSourceLabel, shouldAttachPastedText, shouldCompactContext, shouldInjectBrightsyMcp, shouldRefreshReviewRequestTemplate, shouldResetSessionForOccupancy, shouldRunWorktreeCleanup, 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, summarizeConversation, switchBrightsyAccount, syncWorkspacesFromThreads, takenTeamSlugsForChatTab, takenTeamSlugsForOrchestration, taskMessageText, thinkingEffortBars, thinkingEffortLabel, thisProcessShouldDrainAgentQueues, threadDisplayLabel, threadFilePath, threadLivePath, threadLockPath, threadRequestsBrightsyMcp, threadsDir, threadsSharingWorktree, toPublicAppSettings, toolDescription, toolDetail, toolFilePath, totalTokens, updateAdvancedSettings, updateAgentExecutable, updateAppEnvironment, updateBrightsySettings, updateClaudeSettings, updateCodexSettings, updateDefaultsSettings, updateIntegrationsSettings, updateLinearIssue, updateOpencodeSettings, updateSchedule, updateThread, userClaudeMcpConfigPath, userCursorMcpConfigPath, validateLinearApiKey, waitForPidExit, warmGithubAgentAuth, withAgentInstructions, withExportedPath, withThreadLock, workspaceSettingsSourceLabel, worktreeCleanupSettings, worktreeDisplayLabel, worktreeDisplayLabelForGroup, worktreeNameFromPath, worktreesRoot, wrapReviewSkillMarkdown, writeInjectedMcpConfig, writePlanFile, writeThread, writeWorktreeFile };