📦 deps(thirdparty): update snapshots

This commit is contained in:
ci[bot]
2026-05-29 08:33:53 +00:00
parent fdb52f1e96
commit 06e0d13d57
1615 changed files with 232858 additions and 0 deletions
@@ -0,0 +1,5 @@
---
description: Display current session ID
---
`${CLAUDE_SESSION_ID}`
@@ -0,0 +1,26 @@
---
description: Collaborative Q&A to clarify unclear requirements and reach a clear path
argument-hint: [topic, problem, or feature to explore]
---
# Pathfinding
Adaptive Q&A workflow to clarify requirements and build confidence before delivering.
## Steps
1. **Load** — Use the Skill tool to load the **outfitter:pathfinding** skill
2. **Consider** — Assess the context below and recent conversation. Ultrathink.
3. **Execute** — Begin the pathfinding workflow per the skill
## Guidance
- This may be greenfield exploration — help shape the idea, not just refine it
- Use EnterPlanMode for questions (enables keyboard selection)
- Ask about literally anything: scope, constraints, tradeoffs, UX, technical approach, concerns
- Make sure questions are non-obvious — don't re-ask what's already clear from context
- Be persistent — continue until confidence level 5 or user requests early delivery
## Context
$ARGUMENTS
@@ -0,0 +1,38 @@
---
description: Orchestrate multiple agents for complex multi-domain tasks
argument-hint: [task description requiring coordination]
---
# Agent Dispatch
Coordinate multiple agents to accomplish a complex task requiring different expertise areas.
## Instructions
- Consider the recent conversation history, your context, and the task to be accomplished.
- Specific user instructions should be followed unless they are contradictory to the task at hand. $ARGUMENTS
## Steps
1. **Load Skills** — Use the Skill tool to load:
- **outfitter:subagents** — agent routing and orchestration patterns
- **outfitter:context-management** — for long-running tasks, teaches Task state persistence
2. **Consider** — Ultrathink and analyze the task, consider the complexity, sequence of steps, and agent requirements.
3. **Planning** — Use the **Plan subagent** to research the codebase and design an orchestration strategy
4. **Report** — Present the orchestration plan (which agents, what sequence, expected handoffs)
- **IMPORTANT**: After presenting the orchestration plan, proceed directly to execution.
- Do not wait for approval unless the task is high-risk (destructive changes, production deployment, security-sensitive).
5. **Execute** — Dispatch agents according to the plan, passing context between them
6. **Persist** — Update Tasks throughout with agent IDs, decisions, and progress (survives compaction)
## Planning Process
Ensure you've loaded the **outfitter:subagents** skill. Then coordinate with the **Plan subagent** to design the orchestration plan. Task the **Plan subagent** to:
1. Explore the relevant parts of the codebase
2. Identify which roles are needed (coding, reviewing, research, testing, etc.)
3. Determine the best available agents for each role
4. Design the execution sequence (sequential, parallel, or hybrid)
5. Return a concise orchestration plan
After receiving the plan, think about if you agree with it, make adjustments where necessary, and proceed with the next steps mentioned above.
@@ -0,0 +1,75 @@
---
description: Systematic debugging with root cause investigation - no random trial-and-error
argument-hint: [bug description or error message]
---
# Systematic Debugging
Start a methodical debugging session using the four-stage investigation framework with iterative review.
## Instructions
- Consider the recent conversation history, your context, and the problem to be debugged.
- Specific user instructions should be followed unless they are contradictory to the task at hand. $ARGUMENTS
## Steps
1. **Load** — Use the Skill tool and load the **outfitter:debugging** skill
2. **Consider** — Ultrathink and analyze the problem, consider available evidence, potential causes, and investigation approach
3. **Dispatch or Execute** — Choose execution path based on available tools:
- **If Task tool available**: Run the debug loop (see below)
- **If Task tool unavailable**: Execute the debugging methodology directly using the loaded skill
## Debug Loop (when Task tool available)
Run iterative cycles until the issue is resolved:
```
┌─────────────────────────────────────────────────────────┐
│ 1. INVESTIGATE — Dispatch outfitter:debugger │
│ └─ Collect evidence, form hypothesis, propose fix │
│ ↓ │
│ 2. REVIEW — Dispatch outfitter:reviewer │
│ └─ Validate fix, check for regressions, verify │
│ root cause addressed (not just symptoms) │
│ ↓ │
│ 3. EVALUATE — Check review outcome │
│ └─ If approved → Done │
│ └─ If issues found → Back to step 1 with feedback │
└─────────────────────────────────────────────────────────┘
```
### Loop Execution
1. **Dispatch debugger** (background) — Pass error context, evidence, any prior feedback
2. **Retrieve results** — Use TaskOutput to get proposed fix and rationale
3. **Dispatch reviewer** (background) — Pass the proposed fix and debugger's findings for code review
4. **Retrieve review** — Use TaskOutput to get validation results
5. **Evaluate**:
- **Approved**: Report success, document root cause and fix
- **Issues found**: Loop back to debugger with reviewer feedback
- **Max iterations (3)**: Escalate to user with findings so far
### Context Accumulation
Each loop iteration passes forward:
- Original error context
- Investigation findings from debugger
- Review feedback from reviewer
- Cumulative hypotheses tested
## The Iron Law
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
If you catch yourself wanting to "just try something" — stop. Return to investigation.
## Context Handoff (for initial dispatch)
When dispatching to the debugger subagent, include:
- Exact error messages or unexpected behavior
- Stack traces if available
- Recent changes (git diff context)
- Reproduction steps if known
- Any hypotheses already formed
- Prior loop feedback (if iterating)
@@ -0,0 +1,87 @@
---
description: Audit plugin and optionally apply auto-fixes
argument-hint: [plugin path]
allowed-tools: Read Write Edit Grep Glob Bash Task Skill
---
# Plugin Audit
$ARGUMENTS
## Steps
1. Delegate by loading the `outfitter:claude-plugin-audit` skill for plugin analysis
2. Review findings and identify auto-fixable issues
3. If auto-fixable issues exist, offer to apply fixes
4. For applied fixes, verify each change
5. Enter Plan mode
6. Present remaining issues that need manual attention with the `AskUserQuestion`
## Workflow
### Stage 1: Audit
Run the plugin audit skill on the target path. If no path provided, use current directory.
Capture:
- Critical issues (blocking)
- Warnings (should fix)
- Info (suggestions)
- Which issues are auto-fixable
### Stage 2: Auto-Fix Decision
If auto-fixable issues found:
```text
Found {N} auto-fixable issues:
- {issue 1}
- {issue 2}
Apply automatic fixes? (will show each change)
```
Use `AskUserQuestion` with options:
1. Apply all auto-fixes
2. Review each fix individually
3. Skip auto-fixes, show manual issues only
### Stage 3: Apply Fixes
For each auto-fix:
1. Show the proposed change
2. Apply the fix
3. Verify the fix worked
Use Tasks to what was fixed vs what remains.
### Stage 4: Follow-Up
Present remaining issues that need manual attention:
```text
## Remaining Issues
### Critical (must fix manually)
- {issue with guidance}
### Warnings (recommended)
- {issue with guidance}
## Next Steps
- {specific action items}
```
## Output
Final summary:
```text
# Plugin Audit Complete
**Plugin**: {name}
**Auto-fixes applied**: {N}
**Remaining issues**: {N} critical, {N} warnings
{next steps or "Plugin is ready for distribution"}
```
@@ -0,0 +1,35 @@
---
description: Check open PR status, review comments, and CI status
argument-hint: [--repo org/repo]
---
# PR Check
Display status of open pull requests including draft state, CI checks, review status, and unresolved comments.
## Usage
```
/pr:check # Check current repo
/pr:check --repo org/repo # Check specific repo
```
## Output
- Number of open PRs
- PR number, title, author
- Draft vs ready status
- CI check status (passing/failing/pending)
- Review decision (approved/changes requested/pending)
- Count of unresolved review threads
- Preview of unresolved comments
---
Run the PR status script:
```bash
bun ${CLAUDE_PLUGIN_ROOT}/commands/pr/scripts/pr-status.ts $ARGUMENTS
```
Present the output to the user. If there are unresolved review comments, offer to help address them.
@@ -0,0 +1,306 @@
#!/usr/bin/env bun
/**
* PR Status Script
* Fetches open PRs for a repository with review comments and status info.
*
* Usage:
* bun pr-status.ts [--repo org/repo]
*
* If --repo is omitted, uses the current repository.
*/
import { $ } from "bun";
/**
* A PR review thread with resolution status.
*/
interface ReviewThread {
/** Whether the thread has been resolved */
isResolved: boolean;
/** Comments in the thread */
comments: { body: string; author: { login: string } }[];
}
/**
* Normalized pull request data for display.
*/
interface PR {
/** PR number */
number: number;
/** PR title */
title: string;
/** URL to the PR on GitHub */
url: string;
/** Whether PR is in draft state */
isDraft: boolean;
/** PR author info */
author: { login: string };
/** Branch name */
headRefName: string;
/** ISO timestamp of creation */
createdAt: string;
/** ISO timestamp of last update */
updatedAt: string;
/** Review decision (APPROVED, CHANGES_REQUESTED, etc.) */
reviewDecision: string | null;
/** CI/CD check status rollup */
statusCheckRollup: {
state: string;
contexts: { name: string; state: string; conclusion: string | null }[];
} | null;
/** Review comment threads */
reviewThreads: { nodes: ReviewThread[] };
}
/**
* Raw PR response structure from GitHub GraphQL API.
*/
interface PRResponse {
/** PR number */
number: number;
/** PR title */
title: string;
/** URL to the PR */
url: string;
/** Draft state */
isDraft: boolean;
/** Author info */
author: { login: string };
/** Branch name */
headRefName: string;
/** Creation timestamp */
createdAt: string;
/** Last update timestamp */
updatedAt: string;
/** Review decision */
reviewDecision: string | null;
/** Commits with status checks */
commits: {
nodes: {
commit: {
statusCheckRollup: {
state: string;
contexts: {
nodes: { name: string; state: string; conclusion: string | null }[];
};
} | null;
};
}[];
};
/** Review threads */
reviewThreads: { nodes: ReviewThread[] };
}
function parseArgs(): { repo: string | null } {
const args = process.argv.slice(2);
let repo: string | null = null;
for (let i = 0; i < args.length; i++) {
if (args[i] === "--repo" && args[i + 1]) {
repo = args[i + 1];
i++;
}
}
return { repo };
}
async function getRepo(specified: string | null): Promise<string> {
if (specified) return specified;
const result =
await $`gh repo view --json nameWithOwner -q '.nameWithOwner'`.text();
return result.trim();
}
async function fetchPRs(repo: string): Promise<PR[]> {
const query = `
query($repo: String!, $owner: String!) {
repository(name: $repo, owner: $owner) {
pullRequests(first: 50, states: OPEN, orderBy: {field: UPDATED_AT, direction: DESC}) {
nodes {
number
title
url
isDraft
author { login }
headRefName
createdAt
updatedAt
reviewDecision
commits(last: 1) {
nodes {
commit {
statusCheckRollup {
state
contexts(first: 20) {
nodes {
... on CheckRun {
name
conclusion
status
}
... on StatusContext {
context
state
}
}
}
}
}
}
}
reviewThreads(first: 50) {
nodes {
isResolved
comments(first: 1) {
nodes {
body
author { login }
}
}
}
}
}
}
}
}
`;
const [owner, name] = repo.split("/");
const result =
await $`gh api graphql -f query=${query} -f owner=${owner} -f repo=${name}`.json();
const prs = result.data.repository.pullRequests.nodes as PRResponse[];
return prs.map((pr) => ({
number: pr.number,
title: pr.title,
url: pr.url,
isDraft: pr.isDraft,
author: pr.author,
headRefName: pr.headRefName,
createdAt: pr.createdAt,
updatedAt: pr.updatedAt,
reviewDecision: pr.reviewDecision,
statusCheckRollup: pr.commits.nodes[0]?.commit.statusCheckRollup
? {
state: pr.commits.nodes[0]!.commit.statusCheckRollup!.state,
contexts:
pr.commits.nodes[0]!.commit.statusCheckRollup!.contexts.nodes.map(
(ctx: Record<string, unknown>) => ({
name: (ctx.name as string) || (ctx.context as string) || "",
state: (ctx.status as string) || (ctx.state as string) || "",
conclusion: (ctx.conclusion as string) || null,
}),
),
}
: null,
reviewThreads: pr.reviewThreads,
}));
}
function formatStatus(pr: PR): string {
if (!pr.statusCheckRollup) return "none";
const state = pr.statusCheckRollup.state;
switch (state) {
case "SUCCESS":
return "passing";
case "FAILURE":
case "ERROR":
return "failing";
case "PENDING":
return "pending";
default:
return state.toLowerCase();
}
}
function formatReviewDecision(decision: string | null): string {
if (!decision) return "pending";
switch (decision) {
case "APPROVED":
return "approved";
case "CHANGES_REQUESTED":
return "changes requested";
case "REVIEW_REQUIRED":
return "review required";
default:
return decision.toLowerCase();
}
}
function countUnresolvedThreads(pr: PR): number {
return pr.reviewThreads.nodes.filter((t) => !t.isResolved).length;
}
function formatOutput(repo: string, prs: PR[]): void {
console.log(`\n## PR Status: ${repo}\n`);
console.log(`**Open PRs:** ${prs.length}\n`);
if (prs.length === 0) {
console.log("No open pull requests.");
return;
}
console.log(
"| # | Title | Author | State | Checks | Review | Unresolved |",
);
console.log(
"|---|-------|--------|-------|--------|--------|------------|",
);
for (const pr of prs) {
const title =
pr.title.length > 40 ? `${pr.title.slice(0, 37)}...` : pr.title;
const state = pr.isDraft ? "draft" : "ready";
const unresolved = countUnresolvedThreads(pr);
const unresolvedStr = unresolved > 0 ? `${unresolved}` : "-";
console.log(
`| [#${pr.number}](${pr.url}) | ${title} | @${pr.author.login} | ${state} | ${formatStatus(pr)} | ${formatReviewDecision(pr.reviewDecision)} | ${unresolvedStr} |`,
);
}
// Detailed unresolved comments section
const prsWithUnresolved = prs.filter(
(pr) => countUnresolvedThreads(pr) > 0,
);
if (prsWithUnresolved.length > 0) {
console.log("\n### Unresolved Review Comments\n");
for (const pr of prsWithUnresolved) {
const threads = pr.reviewThreads.nodes.filter((t) => !t.isResolved);
console.log(`**#${pr.number}** - ${threads.length} unresolved:`);
for (const thread of threads.slice(0, 5)) {
const comment = thread.comments.nodes[0];
if (comment) {
const preview =
comment.body.length > 80
? `${comment.body.slice(0, 77)}...`
: comment.body;
console.log(` - @${comment.author.login}: ${preview}`);
}
}
if (threads.length > 5) {
console.log(` - ... and ${threads.length - 5} more`);
}
console.log();
}
}
}
async function main() {
const { repo: specifiedRepo } = parseArgs();
try {
const repo = await getRepo(specifiedRepo);
const prs = await fetchPRs(repo);
formatOutput(repo, prs);
} catch (error) {
console.error("Error fetching PR status:", error);
process.exit(1);
}
}
main();
@@ -0,0 +1,126 @@
---
description: Challenge complexity and find simpler alternatives before implementing
argument-hint: [proposed solution or approach to evaluate]
---
# Challenge Complexity
Evaluate the proposed solution for unnecessary complexity before committing to it.
## Instructions
- Consider the recent conversation history, your context, and the proposal to be evaluated.
- Specific user instructions should be followed unless they are contradictory to the task at hand. $ARGUMENTS
## Steps
1. **Load** — Use the Skill tool and load the **outfitter:simplify** skill
2. **Consider** — Ultrathink and analyze the proposal, identify initial complexity concerns
3. **Dispatch or Execute** — Choose execution path based on available tools:
- **If Task tool available**: Run the simplify loop (see below)
- **If Task tool unavailable**: Execute the complexity analysis methodology directly using the loaded skill
## Simplify Loop (when Task tool available)
Run iterative cycles with a persistent skeptic agent until complexity is resolved:
```
┌─────────────────────────────────────────────────────────────┐
│ 1. ANALYZE — Dispatch outfitter:skeptic │
│ └─ Examine proposal, identify complexity triggers, │
│ generate alternatives, return structured findings │
│ ↓ │
│ 2. PRESENT — Share findings with user │
│ └─ Escalation level, alternatives, probing questions │
│ ↓ │
│ 3. DISCUSS — Gather user response │
│ └─ User provides context, answers questions, │
│ or asks skeptic to dig deeper │
│ ↓ │
│ 4. EVALUATE — Determine next action │
│ └─ If resolved → Document decision │
│ └─ If more analysis needed → Resume skeptic (step 1) │
└─────────────────────────────────────────────────────────────┘
```
### Loop Execution
1. **Initial dispatch** — Pass proposal, context, requirements to skeptic
2. **Retrieve results** — Use TaskOutput to get structured JSON analysis
3. **Present to user** — Share escalation level, alternatives, and probing questions
4. **Gather feedback** — User may:
- Answer probing questions (pass answers back to skeptic)
- Ask skeptic to examine specific aspects deeper
- Accept an alternative and proceed
- Justify complexity with evidence (skeptic validates)
5. **Resume or conclude**:
- **More analysis needed**: Resume same skeptic agent with `resume: {agentId}` and new context
- **Decision reached**: Document outcome (proceed with simple, proceed with justified complexity, or revisit approach)
### Resumable Skeptic Pattern
The skeptic maintains context across invocations via the `resume` parameter:
```
Initial dispatch:
→ skeptic analyzes proposal
→ returns findings + agentId: "abc123"
User provides additional context:
→ resume skeptic with { resume: "abc123" }
→ skeptic refines analysis with new information
User asks about specific concern:
→ resume skeptic with { resume: "abc123" }
→ skeptic digs deeper on that aspect
```
This preserves the skeptic's understanding of the proposal through multiple rounds of refinement.
## The Framework
1. IDENTIFY — what complexity is being proposed?
2. ALTERNATIVE — what's the simplest thing that could work?
3. QUESTION — why isn't the simple approach sufficient?
4. DOCUMENT — if complexity is justified, record why
## Context Handoff (for initial dispatch)
When dispatching to the skeptic subagent, include:
- The proposed solution or approach
- Current requirements and constraints
- Any justifications already offered
- Team/project context if relevant
When resuming the skeptic, include:
- User's answers to probing questions
- Additional context or constraints revealed
- Specific areas to examine further
- Evidence offered to justify complexity
## Red Flag Rationalizations
Watch for these justifications — they usually indicate unjustified complexity:
- "We might need this later"
- "It's more flexible this way"
- "This is how X company does it"
- "It's the industry standard"
- "We should do it right the first time"
## Verdicts and Outcomes
The skeptic returns one of three verdicts:
| Verdict | Meaning | Action |
|---------|---------|--------|
| **proceed** | Complexity is minor (◇) | Note alternatives, continue |
| **caution** | Complexity is moderate (◆) | Discuss before proceeding |
| **block** | Complexity is high risk (◆◆) | Address concerns first |
After discussion, document the outcome:
- **Simplified**: Chose simpler alternative
- **Justified**: Complexity validated with evidence, documented in ADR
- **Deferred**: Needs more investigation, created follow-up task
The goal is NOT to reject all complexity — it's to ensure complexity is justified by evidence, not speculation.
@@ -0,0 +1,26 @@
---
description: Generate comprehensive status report across VCS, PRs, issues, and CI/CD
argument-hint: [time range and/or services: graphite, github, linear, beads, all]
---
# Situation Report
Generate a scannable status report for the current project.
## Steps
1. **Detect** — Load the `check-status` skill and run the detection script.
2. **Consider** — Parse the context below for time range and service filters. Ultrathink.
3. **Dispatch** — Launch the **outfitter:scout** agent via Task tool with detected services and context
4. **Retain** — Keep the agent ID for follow-up questions (use `resume` parameter)
## Guidance
- Pass detected services to scout so it knows what to query
- Default time range: 24 hours if not specified
- Lead with attention-needed items (blockers, failing CI, stale branches)
- Present for quick scanning — user should gain situational awareness in 30 seconds
## Context
- $ARGUMENTS
@@ -0,0 +1,37 @@
---
description: Check available CLI tools and get recommendations
argument-hint: [category: search|json|viewers|navigation|http]
---
# Tool Check
Detect available modern CLI tools and get recommendations for your environment.
## Quick Check
Run the detection script:
```bash
bun outfitter/skills/which-tool/scripts/index.ts
```
Filter by category:
```bash
bun outfitter/skills/which-tool/scripts/index.ts -c search
```
## Context
$ARGUMENTS
---
Load the **which-tool** skill and:
1. Run the tool detection script (with category filter if provided)
2. Report which tools are available vs missing
3. For missing tools, note install commands if user wants them
4. If selecting a tool for a task, use the selection matrix from the skill
Use modern tools when available. Fall back gracefully when not.
@@ -0,0 +1,18 @@
---
description: Create a handoff note for session continuity
allowed-tools: Read Edit
---
# Handoff
Creating handoff note for this session.
!`bun ${CLAUDE_PLUGIN_ROOT}/skills/trails/scripts/handoff.ts --session "${CLAUDE_SESSION_ID}"`
Read the created handoff file and fill in the sections:
- **Done**: What was accomplished this session
- **State**: Current state of work (in progress, blocked, etc.)
- **Next**: What should happen next (use checkboxes)
Keep entries scannable — someone should grasp the session in 30 seconds.
@@ -0,0 +1,20 @@
---
description: Create a timestamped log note
argument-hint: <slug>
allowed-tools: Read Edit
---
# Log
Creating log note with slug: **$ARGUMENTS**
!`bun ${CLAUDE_PLUGIN_ROOT}/skills/trails/scripts/log.ts --slug "$ARGUMENTS" --session "${CLAUDE_SESSION_ID}"`
Read the created log file. This is a freeform note for capturing:
- Research findings
- Technical discoveries
- Meeting notes
- Ideas and observations
Add relevant content and tags as needed.
@@ -0,0 +1,18 @@
---
description: Read recent trail notes
argument-hint: "[handoff|log] [--days N]"
allowed-tools: Bash
---
# Read Trail
Reading recent trail notes.
Arguments: $ARGUMENTS
```bash
!bun ${CLAUDE_PLUGIN_ROOT}/skills/trails/scripts/read.ts $ARGUMENTS --no-frontmatter
```
Use `--type handoff` for handoffs only, `--type log` for logs only.
Use `--days N` to read more history (default: 1 day).